udp socket server端必须要先开启吗?

hotkarriver 2014-10-30 11:32:25
情况是这样的,我先把client端打开,开始发数据,是每隔一秒发送一次,然后再打开server端,但是server就卡在了ds.receive(dp);等待接收数据,但是一直都收不到。这时候我把client端关掉重开一下,server端就能收到数据了,想问下,这是正常的吗?server必须要先开启才能收到数据吗?
...全文
733 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hotkarriver 2014-10-31
  • 打赏
  • 举报
回复
引用 2 楼 rumlee 的回复:
[quote=引用 1 楼 rumlee 的回复:] 正常情况下当然要server端先开了。不过出现你这种情况说明你的客户端程序不够健壮,当客户端连接服务器端失败之后,应该隔一个指定的时间后重新连接服务端。 就像我们用qq,如果某天腾讯的服务器端出故障了,然后紧急修复,修复了之后,并不需要我们重启qq,qq也会自动连上。
不好意思,没有看清楚,你用的是udp协议,upd协议应该不存在你说的这个问题啊。 不过你的协议最好定义为双向的,例如客户端发送数据包后,服务器端收到后应该有一个回应,如果超时未收到回应的话,客户端认为发送失败,重新发送,重试一定次数仍然失败则认为服务端故障。[/quote] 谢谢,我试了重写client端,每次重新去new DatagramSocket(),发送完关闭socket,这样server就能在任何时候启动都能收到数据了。
小灰狼 2014-10-31
  • 打赏
  • 举报
回复
这是当然了 UDP是不可靠连接,不保证不检测数据是否到达接收端,如果接收方还没有准备好你就开始发送数据,你的数据包在网络路由里乱跑,最好不知道跑哪里去了
rumlee 2014-10-31
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
正常情况下当然要server端先开了。不过出现你这种情况说明你的客户端程序不够健壮,当客户端连接服务器端失败之后,应该隔一个指定的时间后重新连接服务端。 就像我们用qq,如果某天腾讯的服务器端出故障了,然后紧急修复,修复了之后,并不需要我们重启qq,qq也会自动连上。
不好意思,没有看清楚,你用的是udp协议,upd协议应该不存在你说的这个问题啊。 不过你的协议最好定义为双向的,例如客户端发送数据包后,服务器端收到后应该有一个回应,如果超时未收到回应的话,客户端认为发送失败,重新发送,重试一定次数仍然失败则认为服务端故障。
rumlee 2014-10-31
  • 打赏
  • 举报
回复
正常情况下当然要server端先开了。不过出现你这种情况说明你的客户端程序不够健壮,当客户端连接服务器端失败之后,应该隔一个指定的时间后重新连接服务端。 就像我们用qq,如果某天腾讯的服务器端出故障了,然后紧急修复,修复了之后,并不需要我们重启qq,qq也会自动连上。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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