CodeGo.net> TcpClient(IPEndPoint localEP),选择正确的localEp?

我让自己发疯.

Microsoft通过使用构造函数提供了一种很棒的方式来为新的TCPClient绑定本地网络适配器和端口:

TcpClient newClient = new TcpClient(IPEndPoint localEP);

给定一个通用的remoteEndPoint(IPv4或IPv6),并假设有许多可能的localEP,似乎没有一种明智的方法来确定在调用之前要绑定到哪个localEP:

TcpClient.Connect(IPEndPoint remoteEP)

.net确实提供了无参数的TcpClient构造函数,该构造函数将在调用.Connect时自动确定哪个localEP最好,但不幸的是,它不支持IPv6目标.

我的第一个想法是访问IP路由表并自己确定要使用的适配器,但.net似乎也不提供该功能.

我找到了一个涉及到GetBestInterface()的P.Invoke的解决方案,但是不幸的是,我需要能够在Mono中进行部署,因此确实需要一个托管解决方案.

我的问题/问题是:给定一个已知的remoteEP,以及所有已知的localEP的列表,在实例化tcpClient时如何正确选择正确的localEP,从而使连接方法成功.

解决方法:

如果您要问的是对localEP使用什么,则可以使用新的IPEndPoint(IPAddress.Any,myPort).它将绑定到本地计算机上的任何可用IP地址,并使用端口myPort.这样,任何东西都可以使用其喜欢的IP连接到计算机.如果您具有多个IP(例如NIC),则可以连接,如果我具有IPv4和IPv6,则可以连接到任何一个.

例如:

var client = new TcpClient(new IPEndPoint(IPAddress.Any, myPort));

但是,通常可以只使用新的TcpClient();.

上一篇:我如何持续监视新的TCP客户端?


下一篇:c#-TcpClient.可用的优化