Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# TcpClient(IPEndPoint localEP),是否选择正确的localEP?_C#_Tcpclient - Fatal编程技术网

C# TcpClient(IPEndPoint localEP),是否选择正确的localEP?

C# TcpClient(IPEndPoint localEP),是否选择正确的localEP?,c#,tcpclient,C#,Tcpclient,我快把自己逼疯了 Microsoft提供了一种很棒的方式,通过使用构造函数为新的TCP客户端绑定本地网络适配器和端口: TcpClient newClient = new TcpClient(IPEndPoint localEP); 给定一个通用的remoteEndPoint(IPv4或IPv6),并假设有许多可能的localEP,似乎没有一种明智的方法在调用之前确定要绑定到哪个localEP: TcpClient.Connect(IPEndPoint remoteEP) .net确实提供了

我快把自己逼疯了

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

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,它可以连接到其中任何一个

e、 g:

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

但是,您通常可以只使用
newtcpclient()

我不确定你在问什么,你可以:
var-client=newtcpclient(localEP);client.Connect(remoteEP)您不清楚为什么提供特定的localEP不能确定要绑定到的localEP。。。你是在问如何确定应该分配什么localEP吗?@PeterRitchie:我已经附加了我的实际问题,很抱歉最初不够清楚。我不知道IPAddress。任何值,我都可以使用。非常感谢。