As per SA's comments, you'd really have to have a good reason to attempt something like this manually
I may be wrong, but, it can only work if you have two different 'network ranges', with one address from each network bound to each NIC - the listen NIC is easy
- so lets say you have 10.0.0.250 bound to NIC 1, which you will listen to incoming traffic from on a port
NIC 2 for example may be in network 192.168.2.x, lets say your machine is 192.168.2.49 - so, how you route the send to 192.168.2.100 port 12345 is by forcing use of the correct local endpoint :-
var localEndPoint = new IPEndPoint(IPAddress.Parse("192.168.2.49"), port: 0);
var tcpSendClient = new TcpClient(localEndPoint);
tcpSendClient.Connect("192.168.2.100", 12345);
by using 'port 0' in the Endpoint for the 192.168.2.49 means the output/outbound port is dynamic - by specifying the endpoint 192.168.2.49 you circumvent automatic routing