我已连接到wifi,我也可以通过以太网访问互联网。 无论如何控制WebClient.DownloadString使用以太网而不是wifi或wifi而不是以太网?
答案 0 :(得分:2)
这是一些先进的功能,它被HttpWebRequest,WebRequest,WebClient等抽象掉。但是,您可以使用TcpClient(使用constructor taking a local endpoint)或使用套接字并调用Socket.Bind来执行此操作。
如果需要使用特定的本地端点,请使用Bind方法。您必须先调用Bind才能调用Listen方法。除非需要使用特定的本地端点,否则在使用Connect方法之前无需调用Bind。 绑定到要使用的接口的本地端点。如果您的本地计算机的IP地址为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);
}
}
}