请教一个ACE_SOCK_Stream的问题
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中有没有简单的处理办法? 没有,也不会有。
你的办法就是正常使用的办法。还可以采用简单的策略,接收端用小数据包长,循环收取,比如4096长,如果某次返回长度小于这个数值(recv_n),根据情况判断是网络断开,还是正常情况,如果是正常情况,说明结束。
还可以用尾部标记结束的办法。
ACE只是封装,代替不了你的业务逻辑操作。
页:
[1]