gpt4 book ai didi

c# - TcpClient(IPEndPoint localEP),选择正确的 localEp?

转载 作者:行者123 更新时间:2023-11-30 16:23:18 24 4
gpt4 key购买 nike

我快把自己逼疯了。

Microsoft 提供了一种使用构造函数为新 TCPClient 绑定(bind)本地网络适配器和端口的绝妙方法:

TcpClient newClient = new TcpClient(IPEndPoint localEP);

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

TcpClient.Connect(IPEndPoint remoteEP)

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

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

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

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

最佳答案

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

例如:

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

但是,您通常可以只使用 new TcpClient();

关于c# - TcpClient(IPEndPoint localEP),选择正确的 localEp?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com