簡體   English   中英

套接字和多個IP地址

[英]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文章。

您可以使用值INADDR_ANY進行bind ,這意味着不綁定至任何特定的網絡接口,因此您可以忽略程序正在運行的IP地址。

參考這里這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM