java - 线程服务器如何继续监听更多传入连接的帖子?

标签 java sockets

我正在阅读 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/

相关文章:

c - 对近 80 个或更多客户端使用 select 或多线程?

java - 在 javaagent 中访问 servlet-api

java - 获得焦点时选择(突出显示)jdatechooser 的文本

java - 使用 Spring boot 将数据插入关系表(多对多)

python - SWIG 从 c 中调用 python 代码

Java NIO 服务器如何读取带/不带任何 header 的可变长度数据包

Java实例化运算符

java - Hibernate Search 空间构面查询首先运行 5 次,然后仅返回第 5 个结果

c# - 当 ssh 客户端与 ssh 服务器断开连接时,如何减少 ssh.net 超时?

C# HttpWebRequest to Socket 写入Request Stream延迟3秒