簡體   English   中英

套接字中InputStream / OutputStream的奇怪行為

[英]Strange behaviour of InputStream / OutputStream in Socket

和往常一樣,我在使用流和套接字時遇到了麻煩。

這是我的代碼:

客戶

bitOut.write((f.getName() + "\n").getBytes());
//System.out.println(f.length()); // <- This is the odd part.
bitOut.write((int) f.length());
bitOut.flush();

fileIn = new FileInputStream(f);
byte buffer[] = new byte[BUFFER_SIZE];
int len;
while ((len = fileIn.read(buffer)) != -1) {
    bitOut.write(buffer, 0, len);
}
fileIn.close();

服務器

file = sc.nextLine();
int fileSize = bitIn.read(); // <- Here is my error!
System.out.println(file + ", " + fileSize);

fileOut = new FileOutputStream(folder + file);
byte buffer[] = new byte[BUFFER_SIZE];
int len;
while (fileSize > 0 && (len = bitIn.read(buffer)) != -1) {
    fileOut.write(buffer, 0, len);
    fileSize -= len;
    System.out.println(fileSize);
 }
 fileOut.close();

如果我在客戶端代碼中取消注釋System.out.println(f.length()) ,則服務器始終會在fileSize獲得正確的值。 但是,如果我不評論,則fileSize通常是應該在f.length()之后發送的數據中的一個字節。 一方面,這很有趣,因為幾乎只有當我在客戶端中打印出文件大小時,我才能在服務器上收到正確的結果。 另一方面,我不知道如何解決它。

好的,我解決了。 掃描儀就是這樣,它的方法nextLine()吞噬了我在文件名之后發送的字節。 現在,我只使用普通的InputStreamOutputStream

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM