代码如下:
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Broadcast,5000);
EndPoint endPoint = (EndPoint)ipEndPoint;
udpClient.Bind(ipEndPoint);
udpClient.BeginReceiveFrom(responseBuffer,0,responseBuffer.Length,SocketFlags.None,ref endPoint,new AsyncCallback(ReceiveCallback),udpClient);总是报错:在其上下文中,该请求的地址无效不知道怎么回事,事情很急,感谢大家了

解决方案 »

  1.   

    IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Broadcast,5000);
    EndPoint endPoint = (EndPoint)ipEndPoint;
    udpClient.Bind(ipEndPoint);
    udpClient.BeginReceiveFrom(responseBuffer,0,responseBuffer.Length,SocketFlags.None,ref endPoint,new AsyncCallback(ReceiveCallback),udpClient);提示错误是在:udpClient.BeginReceiveFrom()这一句
      

  2.   

    哦,抱歉,不是udpClient类的方法,这个只是我如此命名的一个SOCKET的对象而已
      

  3.   

    自己参看 msdn吧http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemnetsocketssocketclassbeginreceivefromtopic.asp
      

  4.   

    我大概明白原因了
    socket.bind()方法是绑定本地IP地址和端口(也就是说绑定后此socket发出的消息都被认为是从这个IP的机器上的这个端口发出的),之前我不是很理解其意思,给了一个Broadcast地址现在换个问题:
    1、socket.bind()方法可以给本机socket绑定不同的IP,但这么做的话接收消息机器岂不是无法正确回复信息了?无法正确找到发信“人”
    2、socket.BeginReceiveFrom()方法中的remoteEP 参数到底是指本地IP还是远程机器的IP啊?看字面上是远程通讯机器的IP,但MSDN里面的例子却给了一个IPEndPoint(IPAddress.Any,0)
      

  5.   

    2 remoteEp 是数据来源远程主机终结点 
      之所以这么给 是因为BeginReceiveFrom 方法启动从远程主机异步读取无连接数据报的操作
      再通信之前不需要知道对方的endpoint
      

  6.   

    1 bind绑定本地端 是绑定了接受端 和谁发信息毫无关系
      

  7.   

    1 bind绑定本地端 是绑定了接受端 和谁发信息毫无关系
    ————————————————————————————————
    但如果把IP改了,远程主机如何找到我呢?2 remoteEp 是数据来源远程主机终结点 
      之所以这么给 是因为BeginReceiveFrom 方法启动从远程主机异步读取无连接数据报的操作
      再通信之前不需要知道对方的endpoint
    ————————————————————————————————————
    还是不是很明白,如果不需要知道对方的endpoint,那BeginReceiveFrom 中要求的参数remoteEp 不就是对方的endpoint吗?
      

  8.   

    感谢jiatong1981(末日之痕) 的帮忙 ^^
      

  9.   

    2 remoteEp 是数据来源远程主机终结点 
      之所以这么给 是因为BeginReceiveFrom 方法启动从远程主机异步读取无连接数据报的操作
      再通信之前不需要知道对方的endpoint
    ————————————————————————————————————
    还是不是很明白,如果不需要知道对方的endpoint,那BeginReceiveFrom 中要求的参数remoteEp 不就是对方的endpoint吗?
      

  10.   

    IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Broadcast,5000);这里错了应该是IPAddress.Any, 0如果你用异步的路子来写的话,得到对方的ip应该是在 socket.EndReceiveFrom(IAsyncresult, ref endpoint) 这里的endpointBeginReceiveFrom里也提供了, 我觉得只是为了方便, 如果你想写在这里雕完函数马上阻塞, 组塞之后,就可以在endpoint里得到对方的地址了,不用在End之后
      

  11.   

    哦,是收到对方数据包后才能得到么,也就是说之前添什么问题都不大哦
    难怪要ref endpoint,是用来收到包后把对方地址写进去的啊
    ————————————————————————————————
    以上是我的理解,是否正确,没有问题的话此帖就可以结了^^http://community.csdn.net/Expert/topic/5489/5489987.xml?temp=.3236048
    的问题大家也多多帮忙啊,在此表示感谢
      

  12.   

    我当然是先查了MSDN才来问的。
      

  13.   

    恩,原理就是必须有数据接受到,才能确定endpoint的值