请教一个Socket UDP的问题。

wirner 2016-01-12 10:42:56
我遇到一个奇怪的问题,我把Socket设置为 阻塞模式,现在只启动Socket 服务端,不启动Socket客户端,到了设定的超时时间,就会异常(由于连接方在一段时间后没有正确答复或连接的主机),我的本意是设定Socket服务端,如果没有客户端连接,也只是超时,请问Socket 服务端要怎么配置?

int cnt = 0;

int recv;

byte[] data = new byte[1024];

IPEndPoint ip = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8001);

Socket mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);

mySocket.ReceiveTimeout = 5000;

mySocket.Bind(ip);

IPEndPoint sender = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 0);

EndPoint Remote = (EndPoint)(sender);

recv = mySocket.ReceiveFrom(data, ref Remote);

...全文
157 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wirner 2016-01-12
  • 打赏
  • 举报
回复
引用 1 楼 save4me 的回复:
使用try...catch,当超时, 会产生 SocketException 异常, 通过检查这个异常并进行处理。
捕获的异常就是“由于连接方在一段时间后没有正确答复或连接的主机”。 网上没找到解决方法,您有何方法?
save4me 2016-01-12
  • 打赏
  • 举报
回复
使用try...catch,当超时, 会产生 SocketException 异常, 通过检查这个异常并进行处理。
wirner 2016-01-12
  • 打赏
  • 举报
回复
引用 8 楼 sp1234 的回复:
在传统的 c++ 编程架构中,非常低级,根本没有“异常处理框架”。所以不要持 c++ 的编程习惯一直不放。
有点C的思维,我打算用socket做进程间的通讯,放弃了,也不用委托了,直接采用消协队列!
save4me 2016-01-12
  • 打赏
  • 举报
回复
你可以设置一个委托。在try..catch捕获SocketException,捕获异常后,调用一个委托来执行相应的处理。就能达到你需要的捕获错误,但是有程序员决定处理方法。
引用 2 楼 wirner 的回复:
[quote=引用 1 楼 save4me 的回复:] 使用try...catch,当超时, 会产生 SocketException 异常, 通过检查这个异常并进行处理。
捕获的异常就是“由于连接方在一段时间后没有正确答复或连接的主机”。 网上没找到解决方法,您有何方法? [/quote]
  • 打赏
  • 举报
回复
在传统的 c++ 编程架构中,非常低级,根本没有“异常处理框架”。所以不要持 c++ 的编程习惯一直不放。
  • 打赏
  • 举报
回复
如果你自己有更多的编程能力,那么你应该使用异步Receive的编程方式。 .net 编程由于出现的比较晚(只有15年历史而已),一方面就是很傻瓜化的方法(没有多余状态的Receive),另一方面又有比较专业化的方法(BeginReceive)。不像那些30年以上的老工具那样,弄一个什么 int 类型的返回值来葫芦按说明“是否成功”。
  • 打赏
  • 举报
回复
只要返回,就是说明已经成功。否则抛出异常。 这个逻辑很容易懂。只是你不想搞懂。
wirner 2016-01-12
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
ReceiveFrom 是接受对方回传的数据 你连t客户端都未开,自然是收不到消息的。加之你使用了 阻塞模式 (不收完数据不放手),很自然就是超时出错啦
我的理解是:阻塞超时后,不应该报错呀,返回一个超时信号就可以了,至于超时后,如何处理,程序员会搞定的。C#有点搞不懂。
Poopaye 2016-01-12
  • 打赏
  • 举报
回复
所谓的超时就是一个异常,你以为应该怎么表现?
xuzuning 2016-01-12
  • 打赏
  • 举报
回复
ReceiveFrom 是接受对方回传的数据 你连t客户端都未开,自然是收不到消息的。加之你使用了 阻塞模式 (不收完数据不放手),很自然就是超时出错啦

110,536

社区成员

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

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

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