我要完成一个接收远程计算机的发往本机60000端口的UDP数据并用本机的60000端口向远程计算机的60000端口发回一个UDP数据的功能,代码大致如下:remoteip= IPAddress.Parse("192.168.1.1");                    //set ipaddr
port = 60000; 
ipe = new IPEndPoint(remoteip, port);                  //IPEndPoint
host = new UdpClient(port);   
while (true)
            {
                ////Receive udp data from host
                Byte[] byteReceived = host.Receive(ref ipe);
                ////Send and udp to host
                string request = "Keepalive packet";
                Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
                host.Send(bytesSent, bytesSent.Length, ipe);
            }
现在的问题是如果单独使用收或发,则程序运行正常,但是在收数据后发数据,在第二次接收数据时则会产生异常,说是远程计算机强行断开现有连接,请问这是怎么回事?

解决方案 »

  1.   

    可能是没有建立默认主机的原因你在host.Send(bytesSent, bytesSent.Length, ipe);这里使用
    host.Send(bytesSent, bytesSent.Length)试试,要是不行,就先用Connect建立一个连接吧
      

  2.   

    在Send之前如果通过Connect建立了默认远程主机,就不需要每次调用 Send 方法时都指定远程主机;默认远程主机后,就只能访问该主机。如果要将数据报发送到另一台远程主机,则必须再调用一次 Connect 方法或创建一个没有默认远程主机的 UdpClient.如果已经建立了默认远程主机,但在调用 Send 方法时提供了另一台远程主机,则 Send 将引发异常--------你的程序中每次调用Send的时候都提供了一个ipe,可能就是这个原因,你试试,具体我也不能肯定,呵呵
      

  3.   

    可是我要收发的都是同一台远程主机的数据啊。
    还是不行,在Send用Connect产生同样的异常
      

  4.   

    已经知道原因,因为远程主机回了一个ICMP unreachable,所以产生异常