套接字和多个IP地址

时间:2012-04-12 08:26:34

标签: sockets networking port winsockets

我的机器上有两张互联网卡,配有两个独立的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地址。你认为这可能是问题吗?

谢谢,

百里

2 个答案:

答案 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)

您可以bind使用值INADDR_ANY,这意味着不会绑定到任何特定的网络接口,因此您可以忽略运行程序的IP地址。

引用herehere

相关问题