1

複数の IP アドレスを持つコンピューターで実行されている C# コードがあり、httpWebRequest の IP アドレスを選択する次のコードがあります。

class Interact
{
    <data, cookies, etc>

    HttpWebRequest CreateWebRequest(...)
    {
        .....

            request.ServicePoint.BindIPEndPointDelegate = delegate(
            ServicePoint servicePoint,
            IPEndPoint remoteEndPoint,
            int retryCount)
                      {
                          if (lastIpEndpoint!=null)
                          {
                              return lastIpEndpoint;
                          }
                          var candidates =
                              GetAddresses(remoteEndPoint.AddressFamily);
                          if (candidates==null||candidates.Count()==0)
                          {
                              throw new NotImplementedException();
                          }

                          return
                              lastIpEndpoint = new IPEndPoint(candidates[rnd.Next(candidates.Count())],0);
                      };
            };

        return request;
    } 
}

GetAddresses のコードは次のとおりです。

    static IPAddress[] GetAddresses(AddressFamily af)
    {
        System.Net.IPHostEntry _IPHostEntry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
        return (from i in _IPHostEntry.AddressList where i.AddressFamily == af select i).ToArray();
    }

このコードは、利用可能な IP リストからランダムな IP を選択し、それに固執することになっています。

代わりに、リクエストを送信するたびに、次の例外が発生します。

Unable to connect to the remote server

どうすればこれを機能させることができますか?

4

1 に答える 1

2

次の行で、エンドポイントのポート番号をゼロに設定しているようです。

lastIpEndpoint = new IPEndPoint(candidates[rnd.Next(candidates.Count())],0); 

これが後で変更されない限り、ポート 0 で HTTP サーバーに接続できる可能性は低いですremoteEndPoint。既知 (たとえば、デフォルト ポートで実行されている HTTP サーバーの場合は 80)。

lastIpEndpoint = new IPEndPoint(candidates[rnd.Next(candidates.Count())], remoteEndPoint.Port); 
于 2012-07-09T22:32:00.090 に答える