终极解决了 Java中SSL socket使用getInputStream()阻塞

终极解决了 Java中SSL socket使用getInputStream()阻塞

这个哥们原博是这样的

 godelgnis 最后发布于2018-11-19 19:07:42 阅读数 3526  收藏
展开
今天用socket进行编程练习时,发现程序到了getInputStream()这里就进行不下去了

Socket socket = new Socket("127.0.0.1", 800);
ObjectInputStream reader = new ObjectInputStream(socket.getInputStream());
System.out.println("a");
ObjectOutputStream writer = new ObjectOutputStream(socket.getOutputStream());
 就这样的一个测试代码,a不会打印出来

后来发现是getInputStream()会一直阻塞在那里阻塞

我把两行代码调了一下就好了,还不太清楚原因,先记下来
————————————————
版权声明:本文为CSDN博主「godelgnis」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/godelgnis/article/details/84258285

 

以上是原博 我今天在搞安卓一个项目的时候遇到了类似问题

我的解决方法是 发送与接收分开使用socket 发了就开一个 完事之后关了 接收一样道理 完事之后关了

以下是代码

服务器端

Socket socket =serverSocket.accept();
        
        BufferedReader in=new BufferedReader(new InputStreamReader(socket.getInputStream(),"UTF-8"));
         System.out.println("here1");    
         String s =in.readLine();        
        System.out.println("Server Log:"+s);
        int row=SQLTest.SQLQuery(s);
        System.out.println("查询到:"+row+"行");
        in.close();
        socket.close();
        
        socket =serverSocket.accept();
         BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
         out.write("查询到:"+row+"行");
        out.flush();    
        System.out.println("Sended");
        socket.close();

 

安卓端 

try {
    sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket("120.77.169.1", 9100);
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(sslSocket.getOutputStream(), "UTF-8"));
    out.flush();
    System.out.println("here2");
    out.write(Text);
    out.flush();
    sslSocket.close();
} catch (IOException e) {
    e.printStackTrace();
}
System.out.println("here3");
try {
    sslSocket = (SSLSocket) sslContext.getSocketFactory().createSocket("120.77.169.1", 9100);
    BufferedReader in = new BufferedReader(new InputStreamReader(sslSocket.getInputStream(),"UTF-8"));
    s=in.readLine();
    System.out.println("here4");
    System.out.println("s is "+s);
    in.close();
    sslSocket.close();
} catch (IOException e) {
    e.printStackTrace();
}

版权声明:本文为weixin_43981637原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。