問題
我已經通過從客戶端來的所有數據包嗅探器確認被完全發送,由服務器接收到的數據是完整的爲好,但有一個輕微問題。ServerSocket的文件傳輸缺失字節
這裏是服務器中客戶端線程相關部分的基本表示。
this.data_in = new DataInputStream(sock.getInputStream());
this.in = new InputStreamReader(this.data_in);
服務器將使用的BufferedReader認證數據讀取,一旦認證完成它將從套接字讀取數據,就像這樣。變量'fos'是DataInputStream數據正在寫入的FileOutputStream。
int read = 0;
byte[] buffer = new byte[8192];
while((read = data_in.read(buffer)) != -1) {
fos.write(buffer, 0, read);
bytes_received += read;
}
這一切似乎在概念上是正確的,但是,實際上讀入文件的第一個1450字節丟失。我曾嘗試使用新的DataInputStream(sock.getInputStream()),以防流中的位置很奇怪,但仍然沒有運氣。謝謝你的幫助!
更新1
所以我可以使用的BufferedReader功能我取得了串線,以閱讀,因爲我是之前使用它們的方法。見下面的代碼。
int input;
boolean run = true;
while((input = in.read()) != -1 && run) {
run = true;
char[] chars = Character.toChars(input);
for(char c : chars) {
if(c == '\n') {
run = false;
break;
} else if(c != '\r') {
sb.append(c);
}
}
}
作爲一個好的解決方案,它仍然有1450字節的信息丟失。也許我在這裏走錯了方向?
聽起來像是最合理的答案,我會檢查它。 –
查看主要問題主體中的更新。 –
爲了確保我們不會追查錯誤的問題,請嘗試直接將'sock.getInputStream()'轉儲到文件中,而無需進一步處理,並檢查您期望的數據結構(認證信息+數據)的內容。 – Yahia