套接字和多个IP地址

3
我在我的机器上配置了两个不同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地址。你认为这可能是问题所在吗?

谢谢,

Barry

2个回答

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

参考此处此处


0

我认为这是正确的,取决于您在语句中想要使用的抽象级别。

创建套接字时,它未绑定到IP地址。查看维基百科关于伯克利套接字的文章,首先创建套接字(socket())指定套接字类型。然后将套接字绑定(bind())到一个地址,例如10.0.0.1。然后,根据您想要使用套接字的方式,可以将其设置为监听、接受或连接。

本地主机有一个IP地址,就像任何其他设备一样,即127.0.0.1。您创建套接字并将其绑定到127.0.0.1。然后,该套接字就像您可以与之通信的任何其他套接字一样工作。

您还可以阅读维基百科关于网络套接字的文章。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接