The system I\'m currently working on consists of a controller PC running XP with .Net 2 connected to a set of embedded systems. All these components communicate with each ot
Basically, once the TcpClient.Connect method has been successful, it will have created a mapping between the physical MAC address of the embedded system and the route it should take to that address (i.e. which network card to use).
I don't believe that all messages then sent over the TcpClient connection will be sent out via both network cards.
Do you have any data to suggest otherwise, or are you mealy guessing?
Xp maintains a routing table where it maps ranges of ip-adresses to networks and gateways.
you can view the table using "route print", with "route add" you can add a route to your embedded device.
Try using a Socket for your client instead of the TcpClient Class.
Then you can use Socket.Bind to target your local network adapter
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
If you have two network cards on the machine, then there shouldn't be a problem. Normal IP behaviour should ensure that traffic for your 'private' network (embedded systems in this case) is separate from your public network, without you having to do anything in your code. All that is required is for the two networks to be on different IP subnets, and for your 'public' NIC to be the default.
Assuming your two NICs are configured as follows:
NIC A (Public): 192.168.1.10 mask 255.255.255.0
NIC B (Private): 192.168.5.10 mask 255.255.255.0
The only configuration you need to verify is that NIC A is your default. When you try to send packets to any address in your private network (192.168.50.0 - 192.168.50.255), your IP stack will look in the routing table and see a directly connected network, and forward traffic via the private NIC. Any traffic to the (directly connected) public network will be sent to NIC A, as will traffic to any address for which you do not have a more specific route in your routing table.
Your routing table (netstat -rn) should look something like this:
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
===========================================================================
There will also be some multicast routes (starting with 224) which have been omitted for brevity. The '<<--' indicates the default route, which should be using the public interface.