Java 套接字客户端在使用多线程时被随机重置

Java 套接字客户端在使用多线程时被随机重置,java,multithreading,sockets,Java,Multithreading,Sockets,我创建了java应用程序来连接到传输AIS数据的多TCP服务器 public static void proceed(String serverName, String[] serverDetail) { .......... try (Socket socket = new Socket(hostname, port); InputStream input = socket.getInputStream(); BufferedReader reader = ne

我创建了java应用程序来连接到传输AIS数据的多TCP服务器

public static void proceed(String serverName, String[] serverDetail) {
    ..........
    try (Socket socket = new Socket(hostname, port); InputStream input = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(input))) {
        while ((line = reader.readLine()) != null) {
            // my code here
        }
    } catch (UnknownHostException ex) {
        ex.printStackTrace();
    } catch (SocketException ex) {
        ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    }
    ..........
}
为了使同时连接成为可能,我使用了多线程。(I在地图对象上显示服务器详细信息)

运行该应用程序时,我将在某个随机的t时间在我的套接字上随机重置。重置的套接字将永远不会再次成功连接

我使用WireShart将TCP数据检查到一个断开连接的套接字,并注意到在服务器发送RST信号之前,它接收到一些(或者我可以说很多)TCP Dup ACK


我尝试用单线程的第一个代码连接到服务器,它运行稳定。那么,我做错了什么?

可能没什么。错误是否总是发生在同一台服务器上?是的,它发生在同一台服务器上。我认为那不是我的错。网络因素?
..........
serverMap.forEach((server_name, server_detail) -> {
    new Thread(() -> {
        proceed(server_name, server_detail);
    }).start();
});
..........