我有一台具有几种不同互联网连接的计算机。 LAN、WLAN、WiFi 或 3G。所有这些都是活动的,机器可以使用其中任何一个。
现在我想告诉我的应用程序使用可用的连接之一。例如,我想告诉我的应用程序仅使用 WiFi,而其他软件可能使用其他功能。
在我的 C# 应用程序中,我使用类似的类HttpWebRequest
and HttpWebResponse
.
这可能吗?
这是一些高级功能,由 HttpWebRequest、WebRequest、WebClient 等抽象出来。但是,您可以使用以下方法来执行此操作TcpClient
(使用采用本地端点的构造函数)或使用套接字并调用套接字绑定.
如果需要使用特定的本地端点,请使用 Bind 方法。您必须先调用 Bind,然后才能调用 Listen 方法。除非需要使用特定的本地端点,否则在使用 Connect 方法之前不需要调用 Bind。
绑定到您要使用的接口的本地端点。如果您的本地计算机的 WiFi 地址为 IP 地址 192.168.0.10,则使用该本地端点将强制套接字使用该接口。默认值是未绑定的(实际上是 0.0.0.0),它告诉网络堆栈自动解析您想要规避的接口。
这是基于安德鲁评论的一些示例代码。请注意,指定 0 作为本地端点端口意味着它是动态的。
using System.Net;
using System.Net.Sockets;
public static class ConsoleApp
{
public static void Main()
{
{
// 192.168.20.54 is my local network with internet accessibility
var localEndPoint = new IPEndPoint(IPAddress.Parse("192.168.20.54"), port: 0);
var tcpClient = new TcpClient(localEndPoint);
// No exception thrown.
tcpClient.Connect("stackoverflow.com", 80);
}
{
// 192.168.2.49 is my vpn, having no default gateway and unable to forward
// packages to anything that is outside of 192.168.2.x
var localEndPoint = new IPEndPoint(IPAddress.Parse("192.168.2.49"), port: 0);
var tcpClient = new TcpClient(localEndPoint);
// SocketException: A socket operation was attempted to an unreachable network 64.34.119.12:80
tcpClient.Connect("stackoverflow.com", 80);
}
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)