终极解决了 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(); }