|
LR编写winsocket脚本时,遇到一个郁闷的问题
lrs_receive()默认 EndMarker_None .也就是一直接收到server端数据包发空了为止.
但是实际使用时,这个函数就是祸端,99% 会被
Action.c(16): lrs_receive(socket5, buf4)
Action.c(16): Error : socket1 - Connection reset by peer. Error code : 10054.
接收超时,偶尔不出错,接到的数据包size=0
(估计为内部Mismatch操作的问题)
不得已改用lrs_receive_ex() 或者lrs_length_receive(),自己加c语言处理判断结尾来接收. 可以用了,但是缺点不少.
我的目的: server端的信息必须接收(不然模拟通信少了一半,server的负载就少了),但是数据我不要,一个字节都不要.
不知道大家有什么处理的方法不.
这个问题只要大家用LRS肯定会遇到的,比如send一个文件请求,server发回一个几百K甚至几百M的文件回来.
本来很简单的,可以:
do{
lrs_receive_ex(sock,buf, "len = 1000", LrsLastArg);
}
while((lr_get_lastreceive_size(sock) >= 1000)
可是lrs_receive_ex()和 lrs_length_receive()
或者设置lrs_set_receive_option()后用lrs_receive()
这3种方法都没法读取少于额定长度的数据,报错中断。
大家有什么好的处理方法? |
|