我是套接字編程的新手,所以請原諒我,如果這個問題是基本的;我無法在任何地方找到答案。套接字UDP一個套接字,不同的端口
什麼構成需要一個新的套接字?
例如,可能在同一個端口上使用相同的套接字fd發送和接收數據。你可以在端口XXXX上發送並在端口YYYY上用一個套接字接收嗎?如果沒有,那麼套接字特定於主機/端口組合?
感謝您的洞察!
我是套接字編程的新手,所以請原諒我,如果這個問題是基本的;我無法在任何地方找到答案。套接字UDP一個套接字,不同的端口
什麼構成需要一個新的套接字?
例如,可能在同一個端口上使用相同的套接字fd發送和接收數據。你可以在端口XXXX上發送並在端口YYYY上用一個套接字接收嗎?如果沒有,那麼套接字特定於主機/端口組合?
感謝您的洞察!
套接字建立了一個「端點」,它由一個IP地址和一個端口的:
是的,一個單一的插座是特定於單個主機/端口組合。
閱覽推薦:
Beej指南網絡編程:
unix網絡編程:史蒂文斯等人:
端口號是本地屬性,有助於識別發往接收方機器上該端口的傳入數據的套接字端點。每臺計算機都有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)
是:一個插座發送和接收一個端口上;一個不同的套接字可能在不同的端口上發送和接收。客戶端連接在「衆所周知的」端口上(例如http的「80」)。一旦建立連接,通信就會在[「短暫端口」(http://en.wikipedia.org/wiki/Ephemeral_port)上發生。 – paulsm4