社区
网络编程
帖子详情
请教一个关于recvfrom的简单问题。。。。
karlzheng
2008-04-16 05:10:42
recvfrom()接收数据时要指定一定长度,当还没接收到那么长的长度时就会阻塞等待接着接收。。。。--如果我只要它收到一个包就返回应该怎么办?--这个包多长没有定--就是说收到一个包就返回,不阻塞等待。。。。。
请高手指点一下,谢谢!
...全文
1288
23
打赏
收藏
请教一个关于recvfrom的简单问题。。。。
recvfrom()接收数据时要指定一定长度,当还没接收到那么长的长度时就会阻塞等待接着接收。。。。--如果我只要它收到一个包就返回应该怎么办?--这个包多长没有定--就是说收到一个包就返回,不阻塞等待。。。。。 请高手指点一下,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
23 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
greatdiviner
2010-08-04
打赏
举报
回复
看一下select模型~
wanglei5695312
2010-06-27
打赏
举报
回复
有乱码啊,怎么办啊?
meiZiNick
2008-04-30
打赏
举报
回复
接分是王道!
star119119
2008-04-18
打赏
举报
回复
引用 16 楼 star119119 的回复:
不过应该是flush一类的方法.
就是socket一系列的方法.我知道unix有,windows也应该有.不过最直接的办法是关闭socket再建立连接.这个是我以前一个项目实现的,那是因为对方是一台CT机检查肠胃的机器.
我的意思是说对方sendto()发来512字节,我recvfrom()接收的长度也设了512字节。。。。缓冲区是513字节,嘿嘿。。。不起作用吗?
是的,不管用,你设置的缓冲区长度只是用来表明最大接受长度是513,但是实际接受长度只会小于等于他
没这个函数,好像有个setsockopt(),看不懂怎么设置。。。。
BOOL flg = TRUE; // Non Block
if (::ioctlsocket(udp_sd, FIONBIO, (unsigned long *)&flg) != 0)
return GetSockErrorMsg("ioctlsocket(nonblock)"), FALSE;
用这个.上面的我记错了.
aj3423
2008-04-17
打赏
举报
回复
网络程序推荐用抓包工具调试 如sockMon
TeddyGe
2008-04-17
打赏
举报
回复
你设定的每次发送的大小和每次接收的大小是否一样呢
查看一下.
把发送的Buffer的Size 和接收Buffer的Size设置成一样的
karlzheng
2008-04-17
打赏
举报
回复
[Quote=引用 18 楼 Cricketol 的回复:]
recvfrom 接受到数据就会返回的
[/Quote]
没收到就会阻塞。。。。已经讨论过了。。。。
如果要没收到不阻塞,应该怎么办?
Cricketol
2008-04-17
打赏
举报
回复
recvfrom 接受到数据就会返回的
karlzheng
2008-04-17
打赏
举报
回复
请高手说一说啊
karlzheng
2008-04-17
打赏
举报
回复
[Quote=引用 16 楼 star119119 的回复:]
不过应该是flush一类的方法.
[/Quote]
哪个类的方法?--我用的是recvfrom()API。。。
[Quote=引用 16 楼 star119119 的回复:]
收发数据长度设置一样长??什么意思
[/Quote]
我的意思是说对方sendto()发来512字节,我recvfrom()接收的长度也设了512字节。。。。缓冲区是513字节,嘿嘿。。。不起作用吗?
[Quote=引用 16 楼 star119119 的回复:]
是使用wsasetsockopt函数设置的
[/Quote]
没这个函数,好像有个setsockopt(),看不懂怎么设置。。。。
star119119
2008-04-17
打赏
举报
回复
现在问题不在这里,--我两边收发数据包长度设置一样长了的
现在问题是:我执行了recvfrom之后,再发包过去 对方 就收不到了!!
--请问windows下有什么函数可以清SOCKET缓冲区的?
recvfrom()有参数设置应该注意什么?
Linux下有个MSG_DONTWAIT的参数,在windows下有什么对应的参数?
===========================================
收发数据长度设置一样长??什么意思,是设置缓冲区大小一样么? 如果是,那么不会起太大作用.对于你的问题.
如果是其他的话,那就和你的程序实现有关了.
清缓冲区有对应函数,但是我也不记得了,我手头没有msdn没办法帮你查.不过应该是flush一类的方法.
Linux下有个MSG_DONTWAIT的参数,在windows下有什么对应的参数?这个是设置非阻塞么? 具体查msdn吧.但是是使用wsasetsockopt函数设置的,好象是这么写
karlzheng
2008-04-17
打赏
举报
回复
已加了100分了,高手继续指点一下啊。。。。
萧乐颜
2008-04-17
打赏
举报
回复
学习
karlzheng
2008-04-17
打赏
举报
回复
[Quote=引用 11 楼 star119119 的回复:]
可能是你接收数据的逻辑处理问题.
为何不把你发送的数据修改一下格式
比如拿出头几个字节作为存储数据长度的单元.
[/Quote]
现在问题不在这里,--我两边收发数据包长度设置一样长了的
现在问题是:我执行了recvfrom之后,再发包过去 对方 就收不到了!!
--请问windows下有什么函数可以清SOCKET缓冲区的?
recvfrom()有参数设置应该注意什么?
Linux下有个MSG_DONTWAIT的参数,在windows下有什么对应的参数?
karlzheng
2008-04-17
打赏
举报
回复
[Quote=引用 8 楼 fanskydream 的回复:]
你设定的每次发送的大小和每次接收的大小是否一样呢
查看一下.
把发送的Buffer的Size 和接收Buffer的Size设置成一样的
[/Quote]
设了一样大小了,但是不行。--现在的问题是执行了recvfrom之后,我再发包过去 对方 就收不到了!!
晕到死,不知道为什么?
在WINDOWS下这个recvfrom()函数的flag参数我设为 MSG_PEEK。。。--对方发来的数据包收到一次之后,发现即使对方没发包过来我也还能取到数据包。。。。设为MSG_OOB,又发现即使对方发包过来也没收。。。。--Linux下有个MSG_DONTWAIT的参数,在windows下有什么对应的参数啊?
star119119
2008-04-17
打赏
举报
回复
可能是你接收数据的逻辑处理问题.
为何不把你发送的数据修改一下格式
比如拿出头几个字节作为存储数据长度的单元.
然后可以
int recvLen = 0;
do{
recvlen+=recvfrom(s,buf);
datalen=(short)buf[0];
}while(recvlen<datalen);
这样就可以在接受完数据的时候退出循环
karlzheng
2008-04-17
打赏
举报
回复
[Quote=引用 9 楼 aj3423 的回复:]
网络程序推荐用抓包工具调试 如sockMon
[/Quote]
请问从哪里下?--最好是开源的,现在一不小心就中病毒。。。。
karlzheng
2008-04-16
打赏
举报
回复
[Quote=引用 5 楼 slq19851208 的回复:]
我也发现这样的问题 接受这边 受到了很多乱码? 不知道为什么,哪位高手解决下
[/Quote]
我没有乱码,但对方发送过来,sendto()返回值说明成功发送了512个字节,但我这边没有收到。。。。有时又好像收到两次了那样。。。。
请高手说一说应该怎么解决。。。
BTW:我用的是UDP传输
slq19851208
2008-04-16
打赏
举报
回复
我也发现这样的问题 接受这边 受到了很多乱码? 不知道为什么,哪位高手解决下
karlzheng
2008-04-16
打赏
举报
回复
[Quote=引用 3 楼 aj3423 的回复:]
"recvfrom()接收数据时要指定一定长度,当还没接收到那么长的长度时就会阻塞等待接着接收。。。。"
正好相反,recvfrom指定的那个长度是最大接收字节,而不是最小接收字节
只要接收到数据,就会返回
[/Quote]
嗯,谢谢指点
发现现在的问题是:我给对方发一个包,然后调用Recvfrom准备接收对方回应的包,但却没收到。。。。(对方在收到我的包后就用sendto()发送响应包回来的。。。但不知道为什么没能收到。。。)
请问能否知道问题会出在哪里?
加载更多回复(3)
基础
请问怎么得到
一个
函数的执行时间,单位毫秒!如何调试asp组件呀。用vc++调试编制的组件怎样画
一个
箭头?高分
请教
如何限制程序运行的方法?求助:通过编程DirectX抓屏------>masterz:再麻烦你一下,谢谢熟悉RichEdit...
程序员修神之路--简约而不
简单
的分布式通信基石
点击“蓝字”关注,领取架构书籍菜菜哥,
请教
一个
问题
呗面试又被卡住了?还是你了解我呀,tcp协议面向连接是怎么回事呢?这个说详细起来,那本好几百页的tcp协议的书籍你倒是可以看看分布式系统...
UDP 打洞
Question:
请教
UDP 打洞是个什么过程,有成功过的请进。在网上找到一位前辈的示例代码,想借鉴一下。但是尝试过他的代码后,总是无法成功。
问题
主要出在UDP打洞这里。这段代码片断如下://接收消息线程中for(;;){int ...
UNIX痛恨者手册
转载自:Simson ...一本很有趣的书, 是那些用惯UNIX的人对UNIX的各种指责,诋毁,谩骂和嘲笑. 是由爱而生的恨. 即使当成一本高级笑话书,也是很有价值的. UNIX痛恨者手册 By Simson Garfinkel, Daniel Weise, S...
安卓逆向入门之使用frida框架
简单
Hook native层的函数
声明:本文只做技术交流,如有侵权,请告知删除,谢谢。请读者先完成第一篇中的例子再来学习这一篇,传送门:https://mp.weixin.qq.com/s/2kykNy-...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章