为什么我无法将 TCP 套接字绑定到另一个 IP 地址?

问题描述 投票:0回答:1

在客户现场,以下代码运行得非常神奇:

private IPEndPoint GetCurrentServerIpAddress()
{           
    ...
    return new IPEndPoint(IPAddress.Parse("192.168.13.9"), 12714);
}
var IPAddress = GetCurrentServerIpAddress();
_socket.Bind(IPAddress);
        

由于我需要解决该客户网站上的错误,因此我尝试在自己的电脑上启动该程序。为此,我想使用另一台 IP 地址为“10.0.1.60”的测试计算机(都是虚拟机),我想做同样的事情(但显然使用新的 IP 地址:

private IPEndPoint GetCurrentServerIpAddress()
{           
    ...
    return new IPEndPoint(IPAddress.Parse("10.1.0.60"), 12714);
}
var IPAddress = GetCurrentServerIpAddress();
_socket.Bind(IPAddress);

然而,这不起作用:我总是陷入

System.Net.Sockets.SocketException
,提到“请求的地址在其上下文中无效”。

我清楚地看到“192.168.xxx.yyy”和“10.0.1.zzz”是不同(种类)的地址,这可能会导致此问题。

我该怎么做才能避免该错误消息并能够从我的测试机器发送 TCP 消息?

编辑:我电脑的“ipconfig”
最后一条评论提到了我的计算机(Windows-10 计算机)上的接口状况。由于我不知道如何解释此评论,因此

ipconfig
命令结果:

Prompt>ipconfig

Windows IP Configuration


Ethernet adapter Ethernet 4:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Ethernet 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Ethernet:

   Connection-specific DNS Suffix  . : company.int
   Link-local IPv6 Address . . . . . : fe80::4c66:9ac5:dbd0:656%25
   IPv4 Address. . . . . . . . . . . : 10.1.3.19
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . : 10.1.3.254

Wireless LAN adapter Wi-Fi:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Local Area Connection* 1:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Wireless LAN adapter Local Area Connection* 2:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter VMware Network Adapter VMnet1:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe60::b53a:f868:31d0:e5a9%5
   IPv4 Address. . . . . . . . . . . : 192.168.133.11
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Ethernet adapter VMware Network Adapter VMnet8:

   Connection-specific DNS Suffix  . :
   Link-local IPv6 Address . . . . . : fe60::332e:9c68:4e2d:ceb7%27
   IPv4 Address. . . . . . . . . . . : 192.168.42.11
   Subnet Mask . . . . . . . . . . . : 255.255.255.0
   Default Gateway . . . . . . . . . :

Ethernet adapter Ethernet 3:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Talk2m-eCatcher:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Ethernet 9:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :

Ethernet adapter Ethernet 10:

   Media State . . . . . . . . . . . : Media disconnected
   Connection-specific DNS Suffix  . :
c# ip-address nettcpbinding tcpsocket
1个回答
0
投票

由于您的测试计算机上没有与 IP 地址“10.1.0.60”关联的网络接口,因此您尝试将此 IP 地址与代码“绑定”将会失败。

简单来说,这意味着提供的 IP 地址未分配给您计算机上的任何网络接口。

请尝试使用IPAddress.Any来监听任何IP地址。

Socket.Bind
方法使用 Any 字段来指示 Socket 实例必须侦听所有网络接口上的客户端活动。

© www.soinside.com 2019 - 2024. All rights reserved.