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,或者如果端口号正常,您可以硬编码端口号已知(例如,80 表示在默认端口上运行的 HTTP 服务器)。

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