问题
我已经通过从客户端来的所有数据包嗅探器确认被完全发送,由服务器接收到的数据是完整的为好,但有一个轻微问题。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