我正在阅读 Sun 的 Java 教程。我正在学习有关套接字的类(class)。简单的线程服务器有以下代码:
import java.net.*;
import java.io.*;
public class KKMultiServer {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
boolean listening = true;
try {
serverSocket = new ServerSocket(4444);
} catch (IOException e) {
System.err.println("Could not listen on port: 4444.");
System.exit(-1);
}
while (listening)
new KKMultiServerThread(serverSocket.accept()).start();
serverSocket.close();
}
}
据说服务器“继续监听更多传入连接”。我只是不明白这怎么可能; serverSocket.accept()
行构造了一个新的(客户端)Socket
对象,根据教程“绑定(bind)到相同 本地端口”并且有它的……”。那么,服务器怎么可能与客户端通信并在同一端口上监听更多传入连接呢?据我所知,如果一个端口用于某些连接,它就会被阻塞,不能用于更多的事情。
那么我在这里弄错了什么?
最佳答案
好吧,套接字不是基于端口的一对一,它在(地址,端口)的元组上是唯一的。连接 - 通信中涉及的一对本地和远程套接字 - 用于将来自端口的传入数据多路分解到正确的套接字,从而允许一个端口上有多个套接字。 See Wikipedia .也就是说,socket与端口的关系是N对1的
关于java - 线程服务器如何继续监听更多传入连接的帖子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8901243/