• 关于客户端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的通信机制所决定

  • 相关阅读:
    Transact_SQL小手册(各种sql语句大集合)
    矮人DOS工具箱 使用说明
    window.showModalDialog以及window.open用法简介 (转)
    正则表达式(转)
    Ajax.net用户指南(转)
    Java相关的开源GIS系统
    数据库操作之ODBC
    编译第一个OSG程序时候需要注意的
    OSG编译
    VC 多线程编程(转)
  • 原文地址:https://www.cnblogs.com/fengfenghuifei/p/15557664.html
Copyright © 2020-2023  润新知