产生原因 在创建客户端和服务端后,出现java.net.SocketException: Connection reset的错误。 导致的原因 客户端或者服务端其中一端还在传输数据的途中
导致的原因
看错误代码:未及时关闭客户端连接,导致服务端仍旧在连接中读取数据。
package com.net.tcp;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;//模拟客户端public class TcpClient { public static void main(String[] args) { OutputStream os=null; Socket socket =null; //1.获取服务端的IP地址+端口号 try { //获取IP地址 InetAddress getByName = InetAddress.getByName("127.0.0.1"); //获取端口号 int port=8080; //创建一个Socket连接 socket = new Socket(getByName, port); System.out.println("12"); //向连接发送数据,使用IO流 os= socket.getOutputStream(); os.write("你还号码".getBytes()); Thread.sleep(3000); // 1000毫秒,即1秒钟 } catch (Exception e) { e.printStackTrace(); } //未对连接进行关闭 } }}
2. 服务端代码:
package com.net.TCP;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;//模拟TCP协议发送消息:三次握手//模拟服务端接受数据public class TcpService { public static void main(String[] args) { try { //1.客户端需要拥有一个端口号 ServerSocket serverSocket = new ServerSocket(8080); //等待客户连接 Socket accept = serverSocket.accept(); //读取客户信息 InputStream is = accept.getInputStream(); //使用管道流输出数据 //创建管道流对象 ByteArrayOutputStream bos = new ByteArrayOutputStream(); //创建管道流缓冲区 byte[] b=new byte[1024]; int len; while ((len= is.read(b))!=-1){ System.out.println("23"); //通过管道流输出数据 bos.write(b,0,len); } System.out.println(bos.toString()); } catch (IOException e) { e.printStackTrace(); } }}
只需要对两端的连接和数据流及时关闭就可以解决该问题
package com.net.TCP;import java.io.IOException;import java.io.OutputStream;import java.net.InetAddress;import java.net.Socket;//模拟客户端public class TcpClient { public static void main(String[] args) { OutputStream os=null; Socket socket =null; //1.获取服务端的IP地址+端口号 try { //获取IP地址 InetAddress getByName = InetAddress.getByName("127.0.0.1"); //获取端口号 int port=8080; //创建一个Socket连接 socket = new Socket(getByName, port); System.out.println("12"); //向连接发送数据,使用IO流 os= socket.getOutputStream(); os.write("你还号码".getBytes()); Thread.sleep(3000); // 1000毫秒,即1秒钟 } catch (Exception e) { e.printStackTrace(); } finally { try { os.close(); } catch (IOException e) { e.printStackTrace(); } try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } }}
package com.net.TCP;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.ServerSocket;import java.net.Socket;//模拟TCP协议发送消息:三次握手//模拟服务端接受数据public class TcpService { public static void main(String[] args) { ByteArrayOutputStream bos =null; InputStream is =null; Socket accept =null; try { //1.客户端需要拥有一个端口号 ServerSocket serverSocket = new ServerSocket(8080); //等待客户连接 accept = serverSocket.accept(); //读取客户信息 is = accept.getInputStream(); //使用管道流输出数据 //创建管道流对象 bos = new ByteArrayOutputStream(); //创建管道流缓冲区 byte[] b=new byte[1024]; int len; while ((len= is.read(b))!=-1){ System.out.println("23"); //通过管道流输出数据 bos.write(b,0,len); } System.out.println(bos.toString()); } catch (IOException e) { e.printStackTrace(); } finally { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } try { is.close(); } catch (IOException e) { e.printStackTrace(); } try { accept.close(); } catch (IOException e) { e.printStackTrace(); } } }}
来源地址:https://blog.csdn.net/weixin_58841149/article/details/132029776
--结束END--
本文标题: 在使用socket进行通信连接时出现java.net.SocketException: Connection reset的解决方案
本文链接: https://www.lsjlt.com/news/404490.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-04-03
2024-04-03
2024-04-01
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0