我的机器上有两张互联网卡,配有两个独立的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)在我的脚本中,我也将60002更改为50002,IP2。
突然,来自第二个通道的数据到达第一个模拟器。怎么会这样? .net有一个 IPAny ,我想知道模拟器是否以某种方式使用它并忽略其配置文件中的IP地址。你认为这可能是问题吗?
谢谢,
百里
答案 0 :(得分:0)
我会说这是对的。取决于您要在语句中使用的抽象级别。
创建套接字时,它不会绑定到IP地址。查看Berkeley socket上的维基百科文章,您会看到第一个创建套接字(socket()
),说明域,套接字类型和家族。然后套接字绑定(bind()
)到一个地址,例如10.0.0.1。然后,根据您要使用套接字的内容,您可以将其设置为侦听,接受或连接。
Localhost的IP地址与任何其他设备一样,即127.0.0.1。您创建套接字并将其绑定到127.0.0.1。然后该套接字与您可以与之通信的任何其他套接字一样工作。
您还可以阅读Network Socket上的维基百科文章。
答案 1 :(得分:0)