使用 DataInputStream 获取从 Android 客户端发送到此 Java 桌面服务器的 int 和 long。之后,从 Android 客户端收到一个 pdf 文件。客户端向服务器发送的总共3个文件。问题是在另一个方向发送时。
我必须在 while 循环之后立即关闭输入和输出流。如果我不这样做,pdf文件将被损坏,程序将停止并卡在while循环中,并且不会继续执行到线程结束。
如果我必须关闭输入和输出蒸汽,则套接字将关闭。如何重新打开同一个套接字?
我需要重新打开同一个套接字,因为需要向 Android 客户端发送一条消息,表明服务器从中收到了 pdf 文件,以向它发送确认文件已被服务器安全接收的确认信息。
有多个 Android 客户端连接到同一个 Java 服务器,所以我想需要相同的套接字才能将消息发送回客户端。如果没有套接字,将很难确定将消息发送到哪个客户端。
byte[] buffer = new byte[fileSizeFromClient];
while((count = dis.read(buffer)) > 0){
bos.write(buffer, 0, count);
}
dis.close(); // closes DataInputStream dis
bos.close(); // closes BufferedOutputStream bos
编辑:
来自客户端的代码
dos.writeInt((int)length); // sends the length as number bytes is file size to the server
dos.writeLong(serial); // sends the serial number to the server
int count = 0; // number of bytes
while ((count = bis.read(bytes)) > 0) {
dos.write(bytes, 0, count);
}
dos.close(); // need to close outputstream or result is incomplete file sent to server
// and the server hangs, stuck on the while loop
// if dos is closed then the server sends error free file