2016-02-10 31 views
-1

我做了一個程序,它發送HTTP-webrequests。使用特定的IP來發送HTTP-webrequests

爲了保證這些請求被髮送,我希望能夠定義一個IP,通過它發送請求。 因此,如果默認退出不起作用,請求應通過另一個退出發送。

我試過使用IPEndPoint和套接字,但不知何故它不工作。

這是我到目前爲止的代碼

public Response ExecuteRequest(RequestData requestData, NetworkAddress exit) { 
     Tracer.Info("Versuche Request über HTTP abzusetzen."); 
     if (!PrepareIpEndPoint(Address, exit)) { 
      return null; 
     } 
     Address = new Uri(PlaceholderReplacer.ReplacePlaceholders(Address.ToString(), requestData)); 
     return RequestExecutor.ExecuteRequest(Address); 
     } 

     private bool PrepareIpEndPoint(Uri url, NetworkAddress exit) { 
     Tracer.Debug(string.Format("Setze den IP-Endpoint auf{0}", exit)); 
     var ipEndPoint = new IPEndPoint(IPAddress.Parse(exit.Address), 0); 
     var tempSocket = new Socket(ipEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp); 
     tempSocket.Bind(ipEndPoint); 
     tempSocket.Connect(ipEndPoint); 
     return tempSocket.Connected; 
     } 

上面的代碼拋出SocketExceptions。

任何想法,不勝感激。

謝謝,喬希

+0

綁定用於打開可以接受客戶端連接的服務器套接字。 Connect用於連接服務器套接字(作爲客戶端)。你不能在同一個套接字上使用它們。 (你是服務器或客戶端) –

+0

'上面的代碼拋出SocketExceptions'發送完整的異常ToString。由於連接錯誤信息使得診斷錯誤變得困難。 – usr

回答

0

刪除此行:(它是開放接受客戶的端口)

tempSocket.Bind(ipEndPoint); 

您想通過連接到服務器作爲客戶端:

tempSocket.Connect(ipEndPoint); 

你真的確定你想連接到零端口,我敢肯定這不是一個有效的選擇。 (標準HTTP = 80,HTTPS = 443)

var ipEndPoint = new IPEndPoint(IPAddress.Parse(exit.Address), 80);