2013-10-10 106 views
0

我是套接字编程的新手,所以请原谅我,如果这个问题是基本的;我无法在任何地方找到答案。套接字UDP一个套接字,不同的端口

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

例如,可能在同一个端口上使用相同的套接字fd发送和接收数据。你可以在端口XXXX上发送并在端口YYYY上用一个套接字接收吗?如果没有,那么套接字特定于主机/端口组合?

感谢您的洞察!

回答

2

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

是的,一个单一的插座是特定于单个主机/端口组合。

阅览推荐:

Beej指南网络编程:

unix网络编程:史蒂文斯等人:

+0

是:一个插座发送和接收一个端口上;一个不同的套接字可能在不同的端口上发送和接收。客户端连接在“众所周知的”端口上(例如http的“80”)。一旦建立连接,通信就会在[“短暂端口”(http://en.wikipedia.org/wiki/Ephemeral_port)上发生。 – paulsm4

1

端口号是本地属性,有助于识别发往接收方机器上该端口的传入数据的套接字端点。每台计算机都有64K端口用于每种协议类型(TCP或UDP)以及每种类型(IPv4或IPv6)。

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

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

因此,可以的SocketA发送datat到socketB和socketC即使他们坐在不同的端口号。它的工作方式是使用UDP套接字,我们通常使用sendto()API,它允许我们为每个数据包指定IP地址和端口号。因此,我们可以发送一个数据包到端口B,下一个数据包发送到端口C,而不是。

有了TCP,但事实并非如此。一旦建立了连接,让我们的SocketA和socketB之间说的话也没办法,这两种插座可以谈socketC

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