目前知道两种方式,我采用了第一种
1.分两次接受数据
参考http://blog.csdn.net/rachel_luo/article/details/7912468
第一次lrs_receive_ex接受与server约定好的保存长度的字节数,
我的case是前5个字节固定,其中前4个字节表示length,第5个字节表示type
于是我就调用lrs_receive_ex(sock_desc, buf_desc, "NumberOfBytesToRecv=5", LrsLastArg);
第一次先从接受缓冲区中读5个字节的数据出来
然后再调lrs_receive_ex(sock_desc, buf_desc, szBytesLength, LrsLastArg);
其中szBytesLength是从第一次接收的数据中计算出的后续部分的长度
这样就可以把整条数据分两次读完了
2.如果不需要知道数据的长度或者内容,可以一次接受完整条数据
参考http://blog.csdn.net/barebear/article/details/76713946
使用lrs_set_receive_option()这个函数即可
使用参考:
lrs_set_receive_option(EndMarker, EndMarker_None ) //读取直到缓冲结束。
lrs_set_receive_option(EndMarker, StringTerminator , "
") //读取直到"
"符号出现.你可以根据自己的接收数据的结束符修改。
lrs_set_receive_option(EndMarker, BinaryStringTerminator , "\X00")读取直到二进制符号"\X00"出现。
我没有尝试第二种方式,仅看函数来说应该是可行的,使用起来也比第一种方式简单很多,请酌情选用
附上action.c代码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include "lrs.h" int custom_lrs_receive(char *sock_desc, char *buf_desc, void *dummy) { int rc; int buf_len = 5; int real_len; int j; char szBytesLength[300]="