如何在C#中绑定webclient对象上的特定端口

时间:2016-04-03 13:48:07

标签: c# webclient

我正在研究P2P应用程序,我想使用打孔技术来连接对等体。 这是我的PHP第三方服务器脚本。

<?php
echo "{yourIP:'".$_SERVER['REMOTE_ADDR']."',yourPort:".$_SERVER['REMOTE_PORT']."}";
?>

在我的C#代码中,我创建了一个侦听8765的服务器套接字,当我想获取我的公共IP地址和端口号(为了与对等方共享)时,我使用WebClient Object向php服务器发送请求。问题是webclient对象使用随机本地端口来发出请求。 如何将webclient对象绑定到8765端口?所以请求始终使用此端口作为源端口。 谢谢!

抱歉我的英语不好! :)

1 个答案:

答案 0 :(得分:1)

您将无法使用WebClient实现此目的,但您可以使用HttpWebRequest解决此问题:

public static IPEndPoint BindIPEndPointCallback(ServicePoint servicePoint, IPEndPoint remoteEndPoint, int retryCount)
{
    Console.WriteLine("BindIPEndpoint called");
      return new IPEndPoint(IPAddress.Any,5000);

}

public static void Main()
{

    HttpWebRequest request = (HttpWebRequest) WebRequest.Create("http://MyServer");

    request.ServicePoint.BindIPEndPointDelegate = new BindIPEndPoint(BindIPEndPointCallback);

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

}