舒心、快乐,比什么都重要

关于客户端Socket连接服务端,客户端只有在服务端关闭后才收到数据的问题

Socket和服务端连接

服务端从Mina换了 Netty

但是我是用原生Socket写的 就是那种很原始的那种教科书级的

但是连接不上

一直是数据能发送过去

但是接收不到服务端的数据

 

 

终于让我找到了原因下面上代码

 

public class MySocketClient {
    private Socket soc = null;
    private String server = "";
    private int port = 0;
    public static void main(String[] args) {
        try {
            //创建一个客户端socket
            Socket socket = new Socket("localhost",9999);
            //向服务器端传递信息
            OutputStream ots = socket.getOutputStream();
            PrintWriter pw = new PrintWriter(ots);
            pw.write("123456");
            pw.flush();
            //关闭输出流
            socket.shutdownOutput();
            //获取服务器端传递的数据
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            String info = null;
            while((info=br.readLine())!=null){
                System.out.println("我是客户端,服务器说:"+info);
            }
            //关闭资源
            br.close();
            isr.close();
            is.close();
            pw.close();
            ots.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}

 

大家注意  socket.shutdownOutput(); 

这句话,不能少了shutdownOutput()不然,就会造成客户端只有在服务端关闭后才能收到数据的bug

个人感觉因为你不主动关闭socket流,服务端一直以为你在发送数据,占用了你们俩的链接通道所致,socket的通信机制所决定

 

posted @ 2021-11-15 18:27  Arcturis  阅读(838)  评论(0编辑  收藏  举报