为了账号安全,请及时绑定邮箱和手机立即绑定

socket中输入输出流问题

在我编程中遇到了一个问题,就是客户端如果不关闭输入流的话,服务端与客户端之间的通讯就会卡住,只要一调用socket。shutdownInput关闭输入流就正常

客户端代码

public static void main(String[] args) {

try {

//1.创建socket对象,指明需要连接的服务器的地址和端口号

Socket clientSocket=new Socket("localhost", 8811);

//2.连接建立后,通过输出流向服务器端发送请求消息

OutputStream os=clientSocket.getOutputStream();

PrintWriter pw=new PrintWriter(os);

pw.write("用户名 : admin 密码 :123");

pw.flush();

System.out.println("发送成功");

clientSocket.shutdownOutput();//只要把这行给注释了,通讯就会卡住

//3.通过输入流获取服务器的响应信息

InputStream is=clientSocket.getInputStream();

InputStreamReader isr=new InputStreamReader(is);

BufferedReader br=new BufferedReader(isr);

String serverSay=br.readLine();

System.out.println("这里是客户端  ,服务端说 : "+serverSay);

//4.关闭资源

clientSocket.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

求大神解答一下原因

正在回答

1 回答

找到原因来了,问题在于服务器端是用来BufferedReader的readLine函数,这个函数只用在读到换行符的时候才会结束,不然会一直是阻塞的状态。而我这里发送的时候没有加上换行符就会产生阻塞的现象,而我关闭了输出流,就等与强制结束了readLIne函数的进程,所以也能解决问题。

1 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

socket中输入输出流问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信