终极解决了 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();
}
JavaSocket是一种用于网络通信的基本协议,它允许两个应用程序之间进行数据传输。以下是创建和使用Socket的基础步骤: 1. **导入包**: 首先,你需要导入`java.net.Socket`和`java.io.InputStream`、`OutputStream`等流处理相关的包。 ```java import java.io.*; import java.net.*; ``` 2. **创建Socket对象**: 创建一个Socket实例,需要提供服务器的IP地址(通常是localhost表示本地机)和端口号。端口号是一个整数,比如HTTP服务通常使用80端口。 ```java Socket client = new Socket("localhost", 80); ``` 3. **获取输入/输出流**: 使用Socket的`getInputStream()`和`getOutputStream()`方法获取连接到服务器的输入和输出流。 ```java InputStream in = client.getInputStream(); OutputStream out = client.getOutputStream(); ``` 4. **发送数据**: 可以通过`OutputStream`向服务器发送数据,例如UTF-8编码的字符串。 ```java byte[] data = "Hello Server!".getBytes(StandardCharsets.UTF_8); out.write(data); out.flush(); // 确保数据已发送 ``` 5. **接收数据**: 从`InputStream`读取服务器响应的数据,可以使用`read()`方法逐字节读取。 ```java byte[] buffer = new byte[1024]; int bytesRead = in.read(buffer); String response = new String(buffer, 0, bytesRead, StandardCharsets.UTF_8); System.out.println(response); ``` 6. **关闭连接**: 当完成通信后,记得关闭流和Socket以释放资源。 ```java in.close(); out.close(); client.close(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值