为什么一个客户端创建多个套接字

Why are multiple sockets created by one client

一个客户端创建多个套接字

任务是使用套接字创建服务器-客户端通信。客户端是浏览器,它请求一个 html 文件。如果发出请求,服务器将侦听并接受连接。

我想创建一个 thread/client(持久连接),但无法弄清楚为什么为一个请求创建多个套接字。

服务器

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    private ServerSocket serverSocket;

    public Server(int port) {
        try {
            serverSocket = new ServerSocket(port);
        } catch (IOException e) {
            e.printStackTrace();
        }

        int i = 0;
        while (true) {
            try {
                Socket socket = serverSocket.accept();
                Thread t = new HandleClient(i, socket);
                t.start();
                System.out.println("port:" + socket.getPort() + " is connected to " + socket.getInetAddress());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        new Server(2001);
    }
}

例子

port:50065 is connected to /0:0:0:0:0:0:0:1
port:50066 is connected to /0:0:0:0:0:0:0:1
port:50064 is connected to /0:0:0:0:0:0:0:1

ServerSocket.accept() “...阻塞直到建立连接。”

当我测试您的代码时,程序仅执行此 accept() 方法并等待连接。

尝试通过您在 accept() 之后声明的 HandleClient 线程在同一个循环中进行连接是不可能的。

我完全不知道您收到任何输出可能是什么问题,也许您在与 2001 端口连接的不同程序上有一些其他工作线程?