问题
我已经通过数据包嗅探器确认来自客户端的所有数据都已完全发送,并且服务器正在接收的数据也是完整的,但是有一个小问题。
这是服务器中客户端线程相关部分的基本表示。
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 字节的信息。也许我在这里走错了方向?