2012-02-04 3 views

답변

2

원하는 것은 특정 네트워크 어댑터에 바인딩하는 것입니다. 기본적으로 LocalEndpoint는 null이므로 연결은 어댑터를 할당하게됩니다. HttpWebRequest.ServicePoint.BindIPEndPointDelegate를 사용하여 바인딩 대상을 지정할 수 있습니다.

Here is some more information on binding from msdn.

를 사용하여 특정 지역의 엔드 포인트를 사용해야 할 경우 바인딩 방법

var req = (HttpWebRequest)WebRequest.Create("http://google.com/"); 
req.ServicePoint.BindIPEndPointDelegate = BindTo; 
using (req.GetResponse()); 

static IPEndPoint BindTo(ServicePoint servicepoint, IPEndPoint remoteendpoint, int retrycount) 
{ 
    IPAddress ip = IPAddress.Any; //This is where you specify the network adapter's address 
    int port = 0; //This in most cases should stay 0. This when 0 will bind to any port available. 
    return new IPEndPoint(ip, port); 
} 

. 은 Listen 메서드를 호출하기 전에 Bind를 호출해야합니다. 특정 로컬 끝점을 사용해야하는 경우가 아니면 연결 방법을 사용하기 전에 Bind를 호출하는 데 이 필요하지 않습니다. 비 연결 및 연결 지향 프로토콜 모두에서 Bind 메서드를 사용할 수 있습니다.

바인딩을 호출하기 전에 먼저 데이터를 전달하려는 에서 로컬 IPEndPoint를 만들어야합니다. 로컬 주소가 할당 된 것을 신경 쓰지 않는다면 주소 매개 변수로 IPAddress.Any 을 사용하여 IPEndPoint를 만들 수 있으며 기본 서비스 공급자는 에 가장 적합한 네트워크 주소를 할당합니다. 이렇게하면 네트워크 인터페이스가 여러 개있는 경우 응용 프로그램을 간단하게 처리 할 수 ​​있습니다 ( ). 어떤 로컬 포트가 사용되는지에 상관없이 을 사용하면 포트 번호에 0을 사용하여 IPEndPoint를 만들 수 있습니다. 이 경우, 서비스 제공자가 에게 1024

위의 방법을 사용하는 경우 5000 사이의 사용 가능한 포트 번호를 할당합니다, 당신은 주소와 포트 번호가 LocalEndPoint를 호출하여 할당 된 어떤 로컬 네트워크 발견 할 수 있습니다 . 연결 지향 프로토콜을 사용하는 경우 LocalEndPoint는 Connect 또는 EndConnect 메서드를 호출 할 때까지 로컬로 할당 된 네트워크 주소를 반환하지 않습니다. 연결없는 프로토콜을 사용하는 경우 보내기 또는 받기를 완료 할 때까지이 정보에 에 액세스 할 수 없습니다.

관련 문제