java文件接收停止
我在java中使用套接字进行文件传输。 这是客户端代码 当我检查服务器的计数时,是635。这意味着服务器已经发送了635次数据。 但是,客户端的打印计数只有512。从0到511我想它在read停止了,因为java文件接收停止,java,file-transfer,bufferedinputstream,bufferedoutputstream,Java,File Transfer,Bufferedinputstream,Bufferedoutputstream,我在java中使用套接字进行文件传输。 这是客户端代码 当我检查服务器的计数时,是635。这意味着服务器已经发送了635次数据。 但是,客户端的打印计数只有512。从0到511我想它在read停止了,因为 没有打印。有人能告诉我原因和解决方案吗?在服务器端,不能向客户端发送值为-1的字节。这一行: fileWriter.write(-1); 它做不到你想要的。write方法将获取参数的最低8位,并将其作为一个字节发送,在本例中为0xff。在客户端,fileReader.read将作为int类型
没有打印。有人能告诉我原因和解决方案吗?在服务器端,不能向客户端发送值为-1的字节。这一行:
fileWriter.write(-1);
它做不到你想要的。write方法将获取参数的最低8位,并将其作为一个字节发送,在本例中为0xff。在客户端,fileReader.read将作为int类型的0xff接收,而不是作为int类型的-1接收
-1是一个特殊值,表示已到达流的末尾。它不是要写入或读取的有效数据。如果发送-1,客户端将读取为0xff=255。可以发送和接收的值为0..255(包括0..255)。同样,-1是流末尾的特殊值
在服务器端,您不刷新或关闭输出流。这可能解释了缓冲区中的差异数据可能无法传输到客户端。我认为您应该使用数据包来增加计数,并检查是否所有字节都被传输。
public void SendFile(String filename) {
try {
fileReader = new BufferedInputStream(new FileInputStream(CLIENT_PATH + "/" + filename));
int packet;
int count = 0;
while((packet = fileReader.read()) != -1) {
count++;
fileWriter.write(packet);
}
fileWriter.write(-1);
System.out.println(count);
fileReader.close();
}
catch (IOException ioe) {
ioe.printStackTrace();
}
}
System.out.println(filename + " receiver complete. (count : " + count + ")");
fileWriter.write(-1);