socket中输入输出流问题

来源:3-4 完善用户登陆之服务器响应客户端

幕布斯3021265

2018-08-18 14:03

在我编程中遇到了一个问题,就是客户端如果不关闭输入流的话,服务端与客户端之间的通讯就会卡住,只要一调用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回答

  • 幕布斯3021265
    2018-08-18 21:44:34

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

Java Socket应用---通信是这样练成的

分享的是 Java 中的网络编程,使用Socket实现网络聊天通信

125012 学习 · 590 问题

查看课程

相似问题