UDP sendto返回值的问题

hhh_hao 2010-04-16 02:28:34
UDP传输,服务器sendto向客户端发送信息,返回值正常,
问题是当把客户端程序退出后,sendto返回值仍是正常的,不是预期的SOCKET_ERROR,
有人能解释下吗?
...全文
1570 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
hunterliu001 2010-04-21
  • 打赏
  • 举报
回复
udp协议怎么会存在协议上的client啊,无连接,点对点,只管发。。。。
yhlovehx 2010-04-20
  • 打赏
  • 举报
回复
UDP是无连接的协议
服务器并不知道客户端已经closesocket
所以服务端的sendto 都是正常的 除非close了服务端的socket

服务端要检查客户端是否掉线 一般用心跳包的方式 客户端每隔一段时间向 服务器发送一个数据
服务器根据这个来判断 如果长时间没受到心跳包 则认为客户端断开了连接
hhh_hao 2010-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 hhh_hao 的回复:]
引用楼主 hhh_hao 的回复:
UDP传输,服务器sendto向客户端发送信息,返回值正常,
问题是当把客户端程序退出后,sendto返回值仍是正常的,不是预期的SOCKET_ERROR,
有人能解释下吗?


像这种情况,缓冲区是不是会不断增加?
[/Quote]

关于这个问题呢?
zhangwuji1223 2010-04-19
  • 打赏
  • 举报
回复
udp 本来就是不安全的传输。
要确定信息对方已经收到,你自己搞个心跳包,或者给个收到的回复
bragi523 2010-04-16
  • 打赏
  • 举报
回复
阻塞才不会出现WSAWOULDBLOCK呢
非阻塞WSAWOULDBLOCK错误要单独处理

hhh_hao 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 hhh_hao 的回复:]
UDP传输,服务器sendto向客户端发送信息,返回值正常,
问题是当把客户端程序退出后,sendto返回值仍是正常的,不是预期的SOCKET_ERROR,
有人能解释下吗?
[/Quote]

像这种情况,缓冲区是不是会不断增加?
lijianli9 2010-04-16
  • 打赏
  • 举报
回复
会,都是经过系统缓冲区再发送出去的,都有可能造成缓冲区满的情况。
hhh_hao 2010-04-16
  • 打赏
  • 举报
回复
还有个问题,就是非阻塞的UDP socket, sendto有没有可能出现WSAWOULDBLOCK的错误?
bragi523 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hhh_hao 的回复:]
假设客户端异常退出,没有调用到closesocket
[/Quote]
那样sendto就没有办法得到断线消息,所以需要心跳包等
hhh_hao 2010-04-16
  • 打赏
  • 举报
回复
假设客户端异常退出,没有调用到closesocket
bragi523 2010-04-16
  • 打赏
  • 举报
回复
客户端时候closesocket?
另:windows的socket,只有接收才能得到断开消息

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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