Я подключился к Wi-Fi, а также у меня есть доступ к Интернету через Ethernet. Есть ли способ управлять WebClient.DownloadString, чтобы использовать ethernet вместо wifi или wifi вместо ethernet?Ограничить веб-клиент для использования Wi-Fi или Ethernet, или наоборот
ответ
Это несколько расширенная функциональность, которая абстрагируется как HttpWebRequest, WebRequest, WebClient, так и т.п. Вы можете, однако, сделать это, используя TcpClient (используя constructor taking a local endpoint) или используя сокеты и вызывая Socket.Bind.
Используйте метод Bind, если вам нужно использовать определенную локальную конечную точку. Вы должны позвонить Bind, чтобы вызвать метод Listen. Вам не нужно вызывать Bind перед использованием метода Connect, если вам не нужна конкретная локальная конечная точка. Привязать к локальной конечной точке для интерфейса, который вы хотите использовать. Если ваш локальный компьютер имеет IP-адрес 192.168.0.10 для WiFi-адреса, то использование этой локальной конечной точки заставит сокеты использовать этот интерфейс. Значение по умолчанию - unbound (действительно 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);
}
}
}