Ski*_*izz 4 .net c# networking
我目前正在研究的系统包括一台运行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);
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.bind.aspx
基本上,一旦 TcpClient.Connect 方法成功,它将在嵌入式系统的物理 MAC 地址和到达该地址的路由(即使用哪个网卡)之间创建映射。
我不相信通过 TcpClient 连接发送的所有消息都会通过两个网卡发送出去。
您是否有任何数据表明其他情况,或者您只是猜测?