为什么一个客户端创建多个套接字
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 端口连接的不同程序上有一些其他工作线程?
一个客户端创建多个套接字
任务是使用套接字创建服务器-客户端通信。客户端是浏览器,它请求一个 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 端口连接的不同程序上有一些其他工作线程?