问题
由于最近在学计算机网络,于是用JAVA写个聊天程序。
服务器端接受服务器的发过来的图片方法如下:
byte[] inputByte = null;
int length = 0;
DataInputStream dis = null;
FileOutputStream fos = null;
System.out.println("保存图片");
dis = new DataInputStream(socket.getInputStream());
fos = new FileOutputStream(new File(filename));
inputByte = new byte[1024];
while ((length = dis.read(inputByte, 0, inputByte.length)) > 0) {
fos.write(inputByte, 0, length);
fos.flush();
}
System.out.println("保存成功");
我试图给服务器发送图片,却发现服务端卡在了read()方法。查阅源码指出 read() 是一个阻塞函数,也就是说它会一直阻塞直到有数据可读,或者到达流的末尾。
解决办法
一
客户端发送完文件后执行以下语句
socket.shutdownOutput