2013-10-10 105 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)