[英]Sockets and multiple IP Addresses
我的機器上有兩個網卡,配置了兩個單獨的IP地址。 這兩個IP地址都是同一網絡的一部分。 我的意思是,當我創建一個套接字時,這些套接字專門用於這些IP地址之一嗎?
更新:
這是我的情況:
我有一個位於192.168.0.10的硬件設備。 它通過udp與(192.168.0.11,50000)和(192.168.0.12,50000)通信。 硬件設備通過兩個端口執行此操作,如下所示:(192.168.0.10,49000)和(192.168.0.10,49001)。
我通過腳本創建端口(192.168.0.11,50000)和(192.168.0.12,50000),以便我可以記錄和操作通信,然后將數據轉發到兩個能夠與硬件通信的模擬器。
因此,實際上,我的腳本是“中間人”,我在其中記錄和破壞數據以測試硬件。
這是我的腳本的套接字接口:
IP 1 - Channel 1
External_socket = (192.168.0.10, 49000) ** Hardware
External_side_socket = (192.168.0.11, 50000) ** Script
Simulator_side_socket = (192.168.0.11, 50001) ** Script
Simulator_socket = (192.168.0.11, 50002) ** Simulator
IP2 - Channel 2
External_socket = (192.168.0.10, 49001) ** Hardware
External_side_socket = (192.168.0.12, 50000) ** Script
Simulator_side_socket = (192.168.0.12, 50001) ** Script
Simulator_socket = (192.168.0.12, 60002) ** Simulator
並且這按預期工作,並且為每個通道記錄了正確的數據。
但是,如果我進行兩個簡單的更改,它將停止工作:
1)我將第二個模擬器的配置文件從60002更改為50002,同時將IP地址保持在192.168.0.12。
2)在我的腳本中,我還將IP2的60002更改為50002。
突然來自第二個通道的數據到達第一個模擬器。 怎么會這樣? .net有一個IPAny ,我想知道模擬器是否以某種方式使用了它,而忽略了其配置文件中的IP地址。 您認為這可能是這里的問題嗎?
謝謝,
巴里
我會說這是正確的。 根據您要在語句中使用的抽象級別。
創建套接字時,它沒有綁定到IP地址。 查看Berkeley套接字上的Wikipedia文章,您會看到第一個創建了套接字( socket()
),其中聲明了域 , 套接字類型和家族 。 然后將套接字綁定( bind()
)到一個地址,例如10.0.0.1。 然后,根據要使用的套接字,可以將其設置為偵聽,接受或連接。
與其他任何設備一樣,Localhost的IP地址為127.0.0.1。 您創建套接字並將其綁定到127.0.0.1。 然后,該套接字就可以與您可以通信的任何其他套接字一起工作。
您還可以閱讀Network Socket上的Wikipedia文章。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.