在项目组经常遇到TCP连接的问题,一直是遇到了网上查资料,没有自己总结,感觉对这两种错都是模模糊糊,正好,今天又有个现场遇到此种问题需要我帮忙分析解决。通过查阅各种资料,算是比之前理解更加深刻。
connect reset:原因是因客户方已经把TCP连接断开了,服务方还在往socket中写数据。要重现connect reset 需要满足条件:客户端代码中代码要增加socket.setSoLinger(true, 0);查看java api,此句只对调用socket.close()有用,其作用就是当客户端调用socket.close()会像服务端发送reset信号,如果服务端再对此连接进行读、写操作时,服务端就会报connection reset的异常。
connect reset by peer :此异常常见与服务端处理异常退出时,客户端还在往socket里面写数据。前提条件也是:服务端代码也设置了socket.setSoLinger(true, 0);
下面是验证代码
客户端代码:
package com.test.client;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.SocketAddress;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Client {
private static int port = 9999;
private static String host = “127.0