【发布时间】:2012-07-31 18:40:10
【问题描述】:
我快把自己逼疯了。
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,以便连接方法成功。
【问题讨论】:
-
我不确定你在问什么,你可以:
var client = new TcpClient(localEP); client.Connect(remoteEP);你不清楚为什么提供一个特定的 localEP 并不能确定当前的 localEP绑定到... 您是在问如何确定应该分配哪个 localEP? -
@PeterRitchie:我已经附加了我的实际问题,很抱歉最初不够清楚。