2014-03-31 54 views
0

據我瞭解,套接字就像文件一樣只是數據結構。這是否意味着爲不同的IP,PORTNUMBER和TRANSPORT TYPE(TCP/UDP)組合創建了不同的套接字DS?插座之間的關係,傳輸類型,端口號,IP

我想知道,如果下面的實現是可能的

- >製作一個Socket監聽2個不同的IP地址,但相同的端口號,這樣,當一個客戶端發送數據到任何這些IP的(但相同的端口號),服務器應該能夠提供服務。 (或者可以將端口號與2層不同的IP相關聯)

- >使2個過程監聽相同的端口號

+0

套接字不僅僅是數據結構。它們是通信網絡的端點。你偏離主題的問題是建立在謬誤之上的。 – EJP

+0

是的'他們是交流的終點n/w'是我看到的每一處的短語,並且不能真正理解在編程級別的含義 – tez

回答

3

讓一個Socket監聽2個不同的IP地址,但相同的端口號,以便當客戶端將數據發送到任何這些IP(但端口號相同),服務器應能夠爲其提供服務。 (或者可以將端口號與2層不同的IP相關聯)

套接字不能2+ 明確 IP地址聽。您只能在套接字上調用bind()一次,並且它不允許您一次指定多個IP地址。但是,可以使用bind()作爲通配符IP地址的套接字(對於IPv4爲INADDR_ANY,對於IPv6爲IN6ADDR_ANY),這將允許套接字同時綁定到所有可用的本地IP地址。在這種情況下,您確實可以在套接字綁定的任何IP地址上將數據發送到同一端口。

使2個進程相同的端口號

這僅僅是可能的,如果每個進程綁定到不同的IP地址,並沒有使用通配符的IP聽。如果您有多個進程監聽相同的IP和端口,他們將如何知道哪個進程應該處理哪些數據?他們不會,所以操作系統首先不允許它。