录制c/s软件,使用winsocket协议,回放的时候出现mismatch的错误,录制的时候是buf221接收到68078byte,回放的时候是 0byte,如果在send和receive之间加入一段时间的thinktime的时候,就可以完全接收到68078byte的内容。但是要测试响应时间的话不能加入thinktime,所以用了下面的方法,加入了while循环,次运行的时候发现有的时候能通过,有的时候会一直循环半个小时,不知道是什么原因,哪位高手能够帮我解决一下这个问题,如何能测试出这段脚本的响应时间。
int i=0;
lrs_send("socket1", "buf220", LrsLastArg);
while( i!=68087)
{
lrs_receive("socket1", "buf221", LrsLastArg);
i=lrs_get_last_received_buffer_size ("socket1");
}
返回的数据是动态的,出现MISMATCH不奇怪,设置一下匹配时间的最大值就可以了!lrs_set_recv_timeout2().
另外你这个代码有时通过是因为你接收的包大小刚好跟录制时的一样,即是68087,如果第一次接收的不是68087的话基本上死循环了,因为 lrs_receive函数是读缓冲的,读过的缓冲会清掉,就是说第一次读的缓冲其实已经读了,不过大小不一致而已,那么你继续循环读的话根本不可能再读到那个完整的包了(被第一次读时清掉了),于是一直在等.你可以尝试用下面的函数:
lrs_set_receive_option(EndMarker, EndMarker_None ) // 读取直到缓冲结束.
lrs_set_receive_option(EndMarker, StringTerminator , "/r/n") //读取直到"/r/n"符号出现 . 你可以根据自己的接收数据的结束符修改
lrs_set_receive_option(EndMarker, BinaryStringTerminator , "//X00") 读取直到二进制符号"//X00"出现