在我的c#程序中,我需要通过指定的ip连接到一个网站。因为我使用 ServicePoint.BindIPEndPointDelegate ,但它不起作用。我搜索并发现了这个:
当服务器支持ipv6时,我们尝试使用其ipv6地址与服务器建立连接。但是回调中指定了ipv4地址。由于在调用委托时已使用AddressFamily.InterNetworkv6创建套接字,因此绑定到IPv4地址失败。所以代表再次被召唤。但返回相同的端点,因此绑定再次失败。这会重复Integer.MaxValue次,然后抛出OverflowException。注意Integer.MaxValue是一个非常大的值,看起来好像代码已经进入无限循环。
现在我该如何解决这个问题?我需要连接指定的ip。 代码:
private void button1_Click(object sender, EventArgs e)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.scopus.com");
request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream data = response.GetResponseStream();
StreamReader reader = new StreamReader(data);
var result = reader.ReadToEnd();
reader.Close();
response.Close();
txtResult.Text = result;
}
public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
IPAddress address=IPAddress.Parse("77.81.99.66");
if (retryCount == 5)
return null;
return new IPEndPoint(address, 7070);
}