控制发送哪个网卡TCP / IP消息

我目前正在研究的系统包括一台运行XP的控制器PC,其中.Net 2连接到一组嵌入式系统。 所有这些组件都通过以太网网络相互通信。 我目前正在XP计算机上使用TcpClient.Connect打开与嵌入式系统的连接以发送TCP / IP消息。

我现在必须将XP计算机连接到外部网络以发送处理数据,因此XP计算机上现在有两个网卡。 但是,发送到外部网络的消息不得出现在将嵌入式系统连接在一起的网络上(不想占用带宽),并且到嵌入式系统的消息不得出现在外部网络上。

因此,我所做的断言是,当使用TcpClient.Connect方法时,发送到定义的IP地址的消息将在两个网卡上发送出去。

如何指定通过.Net网络API发送哪些物理网卡消息。 如果.Net中不存在这样的方法,那么我总是可以P / Invoke Win32 API。

Skizz

尝试为您的客户端使用Socket而不是TcpClient类。

然后,您可以使用Socket.Bind来定位您的本地网络适配器

int port = 1234; IPHostEntry entry = Dns.GetHostEntry(Dns.GetHostName()); //find ip address for your adapter here IPAddress localAddress = entry.AddressList.FirstOrDefault(); IPEndPoint localEndPoint = new IPEndPoint(localAddress, port); //use socket instead of a TcpClient Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //binds client to the local end point client.Bind(localEndPoint); 

http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.bind.aspx

如果您的计算机上有两个网卡,那么应该没有问题。 正常的IP行为应确保“私有”网络(在这种情况下为嵌入式系统)的流量与公共网络分开,而无需在代码中执行任何操作。 所需要的只是两个网络位于不同的IP子网上,并且“公共”NIC是默认的。

假设您的两个NIC配置如下:

 NIC A (Public): 192.168.1.10 mask 255.255.255.0 NIC B (Private): 192.168.5.10 mask 255.255.255.0 

您需要validation的唯一配置是NIC A是您的默认配置。 当您尝试将数据包发送到专用网络中的任何地址(192.168.50.0 – 192.168.50.255)时,您的IP堆栈将查找路由表并查看直接连接的网络,并通过专用NIC转发流量。 (直接连接的)公共网络的任何流量都将发送到NIC A,并且流量将传输到路由表中没有更具体路由的任何地址。

您的路由表(netstat -rn)应如下所示:

 IPv4 Route Table =========================================================================== Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.10 266 <<-- 127.0.0.0 255.0.0.0 On-link 127.0.0.1 306 127.0.0.1 255.255.255.255 On-link 127.0.0.1 306 127.255.255.255 255.255.255.255 On-link 127.0.0.1 306 169.254.0.0 255.255.0.0 On-link 192.168.1.10 286 169.254.255.255 255.255.255.255 On-link 192.168.1.10 266 192.168.1.0 255.255.255.0 On-link 192.168.1.10 266 192.168.1.10 255.255.255.255 On-link 192.168.1.10 266 192.168.1.255 255.255.255.255 On-link 192.168.1.10 266 192.168.5.0 255.255.255.0 On-link 192.168.5.10 266 192.168.5.10 255.255.255.255 On-link 192.168.5.10 266 192.168.5.255 255.255.255.255 On-link 192.168.5.10 266 255.255.255.255 255.255.255.255 On-link 192.168.1.10 276 255.255.255.255 255.255.255.255 On-link 192.168.5.10 276 =========================================================================== 

还会有一些多播路由(从224开始),为简洁起见,省略了这些路由。 “<< - ”表示默认路由,应该使用公共接口。

基本上,一旦TcpClient.Connect方法成功,它就会在嵌入式系统的物理MAC地址和它应该到该地址的路由(即使用哪个网卡)之间创建一个映射。

我不相信通过TcpClient连接发送的所有消息都将通过两个网卡发送出去。

你有没有其他建议的数据,或者你是在猜测吗?

Xp维护一个路由表,它将ip-adresses的范围映射到网络和网关。

您可以使用“route print”查看表格,使用“route add”可以添加到嵌入式设备的路径。