1
我正在用java文件传输线程客户端无法识别的文件流的末尾
这里是服务器的代码
(fileWriter = new BufferedOutputStream(fileTransferSocket.getOutputStream()))
try {
BufferedInputStream fileReader = new BufferedInputStream(new FileInputStream(CLIENT_PATH + "/" + filename));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
fileWriter.flush();
fileReader.close();
System.out.println(filename + " send complete");
}
而且客户端的代码
(fileReader = new BufferedInputStream(fileTransferSocket.getInputStream()))
try {
BufferedOutputStream fileWriter = new BufferedOutputStream(new FileOutputStream(new File(PROGRAM_PATH + "/" + filename)));
int packet;
while((packet = fileReader.read()) != -1)
fileWriter.write(packet);
System.out.println(filename + " receive complete.");
fileWriter.close();
}
服务器打印
System.out.println(filename + " send complete");
它表示服务器发送文件的每个字节。
但是,客户端不能打印
System.out.println(filename + " receive complete.");
我检查了多少次,而循环运行(经过两个,服务器和客户端)
两个while循环运行685倍
我想客户端的while循环无法识别文件传输的结束。
任何人都知道问题?
它没有工作......我无法逃避while循环。 – 2014-10-28 01:40:16
这是不对的。发送-1只是发送字节值“0xFF”。 -1通过输入流'read'方法特别返回,它不是流本身的一部分。 – Radiodef 2014-10-28 01:55:29
似乎在基本输入或输出流中的字节是从0-255,所以在数据转换级别,你不能告诉客户端是结束。否则你关闭套接字或使用应用程序逻辑数据替换结束,不仅-1在客户端。它可能是一些特殊字符。 – 2014-10-28 02:01:19