【问题标题】:Socket UDP one socket, different portsSocket UDP 一个socket,不同端口
【发布时间】:2013-10-18 14:32:20
【问题描述】:

我是套接字编程的新手,如果这个问题是基本的,请原谅我;我在任何地方都找不到答案。

什么构成需要新的套接字?

例如,似乎可以在同一个端口上使用同一个套接字 fd 进行发送和接收。你能用一个套接字在端口 XXXX 上发送并在端口 YYYY 上接收吗?如果不是,那么套接字是否特定于主机/端口组合?

感谢您的洞察力!

【问题讨论】:

    标签: sockets udp port hostname


    【解决方案1】:

    一个套接字建立一个“端点”,它由一个IP地址和一个端口组成:

    是的,单个套接字特定于单个主机/端口组合。

    阅读建议:

    Beej 网络编程指南:

    Unix 网络编程:Stevens 等人:

    【讨论】:

    • 是:一个套接字在一个端口上发送和接收;不同的套接字可能会在不同的端口上发送和接收。客户端连接到“众所周知的”端口(例如 http 的“80”)。建立连接后,将在 "ephemeral port" 上进行通信。
    【解决方案2】:

    端口号是一个本地属性,有助于为接收方机器上的该端口的传入数据识别套接字端点。对于每种协议类型(TCP 或 UDP)和每种家庭类型(IPv4 或 IPv6),每台机器都有 64K 端口。

    使用 UDP,可以向位于不同端口的许多客户端发送(和接收)。因此,对于以下连接:

    UDP_socketA (port p1) <---------> UDP socketB (port p2)
         |
         |
         |
         |
    UDP socketC (port p3)
    

    因此,socketA 可以向 socketB 和 socketC 发送数据,即使它们位于不同的端口号上。它的工作方式是使用 UDP 套接字,我们通常使用 sendto() API,它允许我们为每个数据包指定 IP 地址和端口号。因此,我们可以将一个数据包发送到端口 B,将下一个数据包发送到端口 C,这样就不行了。

    使用 TCP,但情况并非如此。一旦建立了连接,假设在socketA和socketB之间,那么没有办法,这两个socket中的任何一个都可以与socketC通信

    TCP_socketA (port p1) <---------> TCP socket B (port p2)
             |
             |
             |
             |
        TCP socketC (port p3)
    

    【讨论】:

      猜你喜欢
      • 2011-04-22
      • 2013-12-17
      • 2019-10-03
      • 2011-12-28
      • 2014-05-23
      • 1970-01-01
      • 2017-03-30
      • 2017-07-06
      • 2011-12-31
      相关资源
      最近更新 更多