c# udp接收数据奇怪现象

shmily_19900314 2016-11-18 02:49:24
我先把我的代码贴上来再说问题吧
string hostName = Dns.GetHostName();//本机名   
IPHostEntry localhost = Dns.GetHostByName(hostName);
string ip = localhost.AddressList[0].ToString();
localaddr = IPAddress.Parse(ip);
// 实名发送
localIpep = new IPEndPoint(localaddr, 1501); // 本机IP,指定的端口号
udpcSend = new UdpClient(localIpep);

//发送数据
remoteIpep = new IPEndPoint(IPAddress.Parse(Info.RemoteIP), 1500);//终端ip和port
udpcSend.Send(data, data.Length, remoteIpep);
udpcSend.Close();

//接收数据
udpcRecv = new UdpClient(new IPEndPoint(localaddr, 1501));
IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0);
byte[] bytRecv = udpcRecv.Receive(ref remoteIpep);


主要代码就在这了发送数据基本没有问题,这个接收数据是放在try里面的,finally里面有udpcRecv.Close();但是奇怪的是,经常接收数据的时候走到接收数据就不知道程序去哪里运行了,并没有显示卡死在接收数据那里,何况别人是有会数据的,也没有执行下一句代码,总之这个try就没有执行完全,finally所以也就没有执行到,下次使用的时候会提示端口被占用。我根本捕获不到任何错误信息,也找不到错误在哪,其实偶尔也会出现正常的情况,能够解析出正确数据,但这也是在调试的过程中,直接运行EXE文件直接是死掉的情况。大神们,我真的是找不到问题出在哪里了,求教!!!
...全文
478 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
shmily_19900314 2016-11-21
  • 打赏
  • 举报
回复
引用 4 楼 tcmakebest 的回复:
try被楼主吃掉了吗, 其实就是没弄懂UDP怎么用
我第一次用udp通信,也是参考网上的例子写的,不知道是哪里的问题,可以指点一下嘛
shmily_19900314 2016-11-21
  • 打赏
  • 举报
回复
引用 2 楼 mwp 的回复:
udp 接收数据你应该是放在在线程里的吧,线程有没有加 try catch 呢
本来我接收数据是放在新线程里面的,但是经常会出现端口被占用,我就在想是不是新线程的问题导致发送和接收同时用了这一个端口,所以我就改成都在一个线程里面做,但是还会出现我上面描述的问题。。。
shmily_19900314 2016-11-21
  • 打赏
  • 举报
回复
引用 1 楼 crystal_lz 的回复:
那你的try的代码呢 难道你是这样写的?

try{
udpcRecv = new UdpClient(new IPEndPoint(localaddr, 1501));
IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0);
byte[] bytRecv = udpcRecv.Receive(ref remoteIpep)
}ca...
差不多,我写的是就是接收数据那句try了一下,但是也不报错,也看不到执行,这样写不对吗?还是我的udp通信写的不对啊?
  • 打赏
  • 举报
回复
udp 是不可靠的方式,阻塞式的 Receive 语句“死”在那里、接收不到数据岂不是很正常的事情?!你说的东西看不出什么问题,只是你自己不知道“udp 不可靠”而已。
tcmakebest 2016-11-18
  • 打赏
  • 举报
回复
UDP的接收通常是放到一个线程里的, 而且是一个死循环里面, 有一个 try , 当从外面主线程关闭连接的时候, 接收代码就会进入 catch, 此时跳出死循环线程自然就结束了.
tcmakebest 2016-11-18
  • 打赏
  • 举报
回复
try被楼主吃掉了吗, 其实就是没弄懂UDP怎么用
Poopaye 2016-11-18
  • 打赏
  • 举报
回复
mwp 2016-11-18
  • 打赏
  • 举报
回复
udp 接收数据你应该是放在在线程里的吧,线程有没有加 try catch 呢
crystal_lz 2016-11-18
  • 打赏
  • 举报
回复
那你的try的代码呢 难道你是这样写的?

try{
udpcRecv = new UdpClient(new IPEndPoint(localaddr, 1501));
IPEndPoint remoteIpep = new IPEndPoint(IPAddress.Any, 0);
byte[] bytRecv = udpcRecv.Receive(ref remoteIpep)
}ca...

111,097

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧