socket通讯输入流输出流阻塞解决方案

服务器端读入流部分代码:

System.out.println(newBufferedReader(newInputStreamReader(socket.getInputStream())).readLine());

客户端写入流部分代码

BufferedWriterwriter=newBufferedWriter(newOutputStreamWriter(socket.getOutputStream()));

writer.write(content);

writer.flush();

程序运行时出现阻塞

原因分析:

服务器端使用了readLine();也就是在读一行文本,读文件的时候不会出现问题,但是在使用Socket时,客户端写入了数据

但并没有提供换行符,所以服务器端在readLine()时一直处于阻塞状态,

解决方法:

一:

可以在客户端写完数据后加上换行符,

BufferedWriterwriter=newBufferedWriter(newOutputStreamWriter(socket.getOutputStream()));

writer.write(content);

writer.newLine();

writer.flush();

这样在服务器端就不会出现阻塞。

二:

使用DataOutputStream和DataInputStream

服务器端:

input.readUTF();

客户端

output.writeUTF();

相关推荐