【问题标题】:Tcp Listener socket only used for establishing connections or to handle all incomming data?Tcp Listener 套接字仅用于建立连接或处理所有传入数据?
【发布时间】:2016-05-02 03:14:34
【问题描述】:

监听的 Tcp Socket 是否会为每个已建立的连接创建一个新的套接字来处理来自特定客户端的传入数据?这个答案:https://stackoverflow.com/a/26374740/5342935 建议如下:

服务器的原始套接字永远不会用于通过连接进行实际通信。它只是用于创建连接的套接字。

但是:我构建了一个基本的 Tcp/Ip 应用程序并通过 wireshark 查看了数据包,发现从客户端发送到服务器的数据被发送到相同的 ip:port(= 相同的套接字,根据为此:https://stackoverflow.com/a/152863/5342935(表明 Socket 只是连接的一个端点。))作为连接请求。由于对上面第一个答案链接的支持,我首先认为它可能完全是错误的,但是很多人确认它是正确的,这让我感到困惑。

【问题讨论】:

    标签: c# sockets networking tcp


    【解决方案1】:

    你的观察是正确的,但结论是错误的:-)

    监听套接字实际上只是用来建立连接的。然后数据传输连接使用同一对客户端和服务器端口,但操作系统将数据分配到特定于它所属客户端的不同套接字通道。

    【讨论】:

    • 我想我现在明白了,谢谢。但这是否意味着您可以拥有多个套接字/套接字通道,在同一个 ip:port 上等待数据?有人告诉我只能有一个套接字监听一个 ip:port 对(或者我可能解释错了什么?)
    • 有一个套接字正在侦听新连接,但一旦新连接被接受,它就会打开,直到任一侧关闭。可能有很多人在等待和发送数据。只是一个小问题 - 可以指定 REUSE_PORT,然后在同一个端口上可以有多个侦听器。
    • @WhosDatDev,IP 有自己的地址,而不是端口。端口是传输层地址。每个传输层协议都有自己的地址方案。 TCP 和 UDP 将它们的地址称为“端口”,并且每个都有自己的一组端口。您可以同时在 TCP 和 UDP 上使用相同的端口号来处理不同的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2014-03-21
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2021-11-07
    • 2016-07-30
    相关资源
    最近更新 更多