UdpClient 作为客户端连接服务器时,我是用connect连接到指定的ip、port的时候,如果不向服务器发送数据,服务器下发数据的时候我收不到,为什么?
下面是代码,我是反复进行read的,不向服务器发数据,就收不到,请大虾们指点了。
  public bool read()
        {
            RecBuf = new byte[1024];
            UdpState udpState = new UdpState();
            udpState.MyudpClient = udpClient;
            IAsyncResult ar = udpClient.BeginReceive(UdpReceiveCallback, udpState);
            while (!ar.IsCompleted)
            {
                Thread.Sleep(100);
            }
            return true;
        }        private void UdpReceiveCallback(IAsyncResult ar)
        {
            UdpClient d = (UdpClient)((UdpState)(ar.AsyncState)).MyudpClient;
            IPEndPoint remote = (IPEndPoint)((UdpState)(ar.AsyncState)).IpEndPoint;
            RecBuf = d.EndReceive(ar, ref remote);
            RecBufNum = RecBuf.Length;
        }  

解决方案 »

  1.   

    你把代码贴全,是不是udpClient的初始化那部分的问题,或者循环Read 部分也贴出来看看
      

  2.   

            UdpClient udpClient;
            public UClient()
            {
                udpClient = new UdpClient();
            }        public bool Open()
            {
                try
                {
                    udpClient.Connect(this.Ip, this.Port);
                }
                catch (Exception)
                {
                    return false;
                }
                IsOnline = true;
                return true;
            }这是初始化部分,他们写在一个类里面,链接的地址使用的是TCP UDP Socke调试工具,在本机端口调试的
      

  3.   

    while (true)
                {
                    try
                    {
                        if (Tcli.IsOnline)
                        {
                            if (Tcli.read())
                            {
                                ProcRead = Tcli.RecBuf;
                                ProcReadNum = Tcli.RecBufNum;
                                thisEventSocketLog(ProcReadNum.ToString());
                            }
                        }
                        else if (Ucli.IsOnline)
                        {
                            if (Ucli.read())
                            {
                                ProcRead = Ucli.RecBuf;
                                ProcReadNum = Ucli.RecBufNum;
                                thisEventSocketLog(ProcReadNum.ToString());
                            }
                        }
                    }
    我这是一个线程,线程是个read的死循环,怎么会就一次呢。而且我断点看了,他就是没收到。