关于udpClient 收发数据的问题
我做的一个聊天程序,用在广域网,在收发数据的时候有时候能收到,有时候不能收到,根据我的测试,是由于nat有时候通,有时候不通,还有有时候收发数据的时候,接收数据的主线程直接死掉。不知道为什么,我用的所有收发数据所有线程用同一个端口,不知道是不是用同一个端口的原因引起的。我的端口是这样定义的public static IPEndPoint iep=new IPEndPoint(getIP(),getPort());
public static UdpClient sendUdpClient = new UdpClient(iep);
这两句定义在一个类文件里面,其他发送数据和接收数据直接引用。我没有写端口复用,不知道用不用写。我想改socket写,但是要改很多,
高手指点呀,兄弟姐妹帮忙呀,我弄不好回不了老家过年呀,我急呀,就85分了,全拿出来了 --------------------编程问答-------------------- 广域网用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#