当前位置:编程学习 > C#/ASP.NET >>

关于udpClient 收发数据的问题

我做的一个聊天程序,用在广域网,在收发数据的时候有时候能收到,有时候不能收到,根据我的测试,是由于nat有时候通,有时候不通,还有有时候收发数据的时候,接收数据的主线程直接死掉。不知道为什么,我用的所有收发数据所有线程用同一个端口,不知道是不是用同一个端口的原因引起的。我的端口是这样定义的
        public static IPEndPoint iep=new IPEndPoint(getIP(),getPort());
        
        public static UdpClient sendUdpClient = new UdpClient(iep);
这两句定义在一个类文件里面,其他发送数据和接收数据直接引用。我没有写端口复用,不知道用不用写。我想改socket写,但是要改很多,


高手指点呀,兄弟姐妹帮忙呀,我弄不好回不了老家过年呀,我急呀,就85分了,全拿出来了 --------------------编程问答-------------------- 广域网用UDP 偶尔丢包本来就是正常的
另外 你需要开辟线程去专门接收数据 不要再主线程里去接收数据 --------------------编程问答--------------------
引用 1 楼 zhouzhangkui 的回复:
广域网用UDP 偶尔丢包本来就是正常的
另外 你需要开辟线程去专门接收数据 不要再主线程里去接收数据


我做的程序里面管理员账号可以广播,这个广播很奇怪的现象是开始的时候很多客服端收不到,要等一会才能全收到,我接收数据是新开辟的线程,就是这个线程有时候接收数据的时候死掉。

private void receive()
        {
            UdpClient receiveUdpClient =UserHelper.sendUdpClient;
            XMLParse xmlParse = new XMLParse();
            string ipAdd = xmlParse.GetValueByPath("configuration/ServerName1");
            IPEndPoint remote = null;
            while (true)
            {
                try
                {
                    byte[] receiveBytes = receiveUdpClient.Receive(ref remote);
                    if (receiveBytes.Length != 0)
                    {
                        string st1 = Encoding.Default.GetString(receiveBytes);
                        //treatMessage(receiveBytes);
                        Thread treadMes = new Thread(treatMessage);
                        treadMes.IsBackground = true;
                        treadMes.Start(receiveBytes);

                    }
                }

                catch(Exception ex)
                {
                    MessageBox.Show("接收线程出错"+ex);
                    break;
                }
            }

        }


不知道我的IPEndPoint remote = null;这句设置的对不对? --------------------编程问答-------------------- IPEndPoint remote = new IPEndPoint(IPAddress.Any, 0);
IPEndPoint remote = null;

这两句有没有区别,我感觉没有区别不知道是不是?
补充:.NET技术 ,  C#
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,