找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3812|回复: 1

请教一个ACE_SOCK_Stream的问题

[复制链接]
发表于 2009-4-14 11:45:16 | 显示全部楼层 |阅读模式
ACE_SOCK_Stream数据发送端的数据和数据接收端的数据部一致。
数据发送端调用send_n(send_buf, send_len);进行发送
数据接收端用recv(recv_buf, recv_len);进行接收

打多数情况下 send_len == recv_len  , 少数情况下send_len > recv_len

我想用recv_n进行接收数据,这样就不会出现 send_len != recv_len的情况。但是,事先不知道发送端发送数据包的长度,怎么办?
我的目的是:不管发送端发送多长的数据包,接收端都要完整收到这个包?这种情况怎么处理?
我有个傻法子就是:发送端把包长放在包头,接收端接收到数据后,解析包头的数据长,然后与自己接受到得数据长进行比较,若不相等,则继续接收这个包直到接收的总长等于包长为止。
请问,ACE中有没有简单的处理办法?
发表于 2009-4-14 12:19:44 | 显示全部楼层
没有,也不会有。
你的办法就是正常使用的办法。还可以采用简单的策略,接收端用小数据包长,循环收取,比如4096长,如果某次返回长度小于这个数值(recv_n),根据情况判断是网络断开,还是正常情况,如果是正常情况,说明结束。

还可以用尾部标记结束的办法。

ACE只是封装,代替不了你的业务逻辑操作。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-23 21:38 , Processed in 0.018691 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表