recvfrom接收不到数据,求解

jingmei02 2013-03-07 10:01:59
用SmartSniff抓包看到接收缓冲区里有数据,可是用recvfrom接收数据时,有时可以接收到数据,有时却收不到数据,求解释。
...全文
3199 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 6 楼 jingmei02 的回复:
To CKnightx 谢谢!!! 再请教一个问题: recvfrom默认情况下是阻塞的吧,之前我改成了非阻塞模式,并设置了接收超时时间,可以成功接收数据。但是今天却不行了,设置的超时也不起作用,于是我去掉了非阻塞的设置,却没有阻塞,recvfrom得到了对方的sockaddr却没有接收到数据。请问这是怎么回事?
没有收到数据,检查接收方的buffer有没有初始化正确,buffer大小够不够大。
jingmei02 2013-03-18
  • 打赏
  • 举报
回复
To CKnightx 谢谢!!! 再请教一个问题: recvfrom默认情况下是阻塞的吧,之前我改成了非阻塞模式,并设置了接收超时时间,可以成功接收数据。但是今天却不行了,设置的超时也不起作用,于是我去掉了非阻塞的设置,却没有阻塞,recvfrom得到了对方的sockaddr却没有接收到数据。请问这是怎么回事?
jingmei02 2013-03-18
  • 打赏
  • 举报
回复
To CKnightx 谢谢!问题解决了,服务端的接收出了问题。
  • 打赏
  • 举报
回复
首先,楼主应该检查,接收socket有没有绑定端口,绑定的哪个端口,这个端口,是不是客户端发送指定的端口相同。 其次,检查发送的socket所发送到的地址是不是正确的,端口是不是正确。 再次次,sendto是UDP的发送接口,UDP不提供有保证的服务(与TCP的不同)。所以,在网络状况差的环境下,UDP很有可能会丢包。 如果楼主要传输文件之类的数据,建议使用TCP,因为文件需要保证完整性,UDP可能会丢包。保证不了。 当然,你也可以添加RTP协议辅助UDP来保证传输。
  • 打赏
  • 举报
回复
SmartSniff抓包看到接收缓冲区里有数据,这个数据未必是发给指定端口的呀。 而且在网络状况不好的情况下,UDP可能会丢包。UDP并不保证对方一定收到包
jingmei02 2013-03-14
  • 打赏
  • 举报
回复
SOCKET sock = socket(AF_INET, SOCK_DGRAM, 0); sockaddr_in addrLoc; addrLoc.sin_family = AF_INET; addrLoc.sin_addr.S_un.S_addr = htonl( INADDR_ANY ); addrLoc.sin_port = htons(port); bind(sock, (sockaddr *)&addrLoc, sizeof(addrLoc));
  • 打赏
  • 举报
回复
楼主怎么配置的套接字?说下。。~
jingmei02 2013-03-11
  • 打赏
  • 举报
回复
help !!!

18,358

社区成员

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

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