1

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

什么构成需要新的插座?

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

感谢您的洞察力!

4

2 回答 2

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)
于 2013-10-10T18:43:03.710 回答
2

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

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

阅读建议:

Beej 的网络编程指南:

Unix 网络编程:Stevens 等人:

于 2013-10-10T17:34:04.627 回答