小弟在做通讯程序的客户端时遇到两个问题(假定服务段没有问题!)
1.服务端播发的数据记录个数为1千多条,可我只能获得前200~300条记录的数据(会变化)
2.我的程序第一次接收数据包时能够正确接受(包头数据正确),第二次以后接过来的就始终是错误的数据有高人指点我,但是小弟对这方面机制不大了解,不知道如何设置缓冲区 ,以下是部分他的话,因为他比较忙,我不好意思老问他,希望这里有空的大侠予以帮助
“把接受缓冲开大点,可能你后面收的时候缓冲没清”
“第一次没有把缓冲区里数据接受完,要不停循环recv,直到收不到数据为止”接收数据代码:
type
DC_DATA=record
...
mydata: DC_DATA;implementation
ServerSocket1.Socket.Connections[0].ReceiveBuf(mydata,sizeof(DC_DATA));
1.服务端播发的数据记录个数为1千多条,可我只能获得前200~300条记录的数据(会变化)
2.我的程序第一次接收数据包时能够正确接受(包头数据正确),第二次以后接过来的就始终是错误的数据有高人指点我,但是小弟对这方面机制不大了解,不知道如何设置缓冲区 ,以下是部分他的话,因为他比较忙,我不好意思老问他,希望这里有空的大侠予以帮助
“把接受缓冲开大点,可能你后面收的时候缓冲没清”
“第一次没有把缓冲区里数据接受完,要不停循环recv,直到收不到数据为止”接收数据代码:
type
DC_DATA=record
...
mydata: DC_DATA;implementation
ServerSocket1.Socket.Connections[0].ReceiveBuf(mydata,sizeof(DC_DATA));
iReceived : Integer;...... iReceived := ServerSocket1.Socket.Connections[0].ReceiveBuf(mydata, sizeof(DC_DATA));如果iReceived等于SizeOf(DC_DATA),则有可能还存在着没有接收完的数据。4. 你对通讯的机制还没有摸清楚它的底细,所以这个代码问题多多。
var1: DC_HEAD;
var2: DWORD;
var3: WORD;
var4: Integer;
var5: Smallint;
var6: Array of TMP_DATA; //TMP_DATA又是另外一个记录结构,数量取决于var5
end;
我预先知道var5的个数,试过笨办法将实际接收字节数替代sizeof(DC_DATA)),可还是不能达到预期呵呵,摸清通讯机制肯定不是几天就可以的,小弟不是搞开发,做的只是验证程序,还望2楼的大侠多加帮助
偶现在最郁闷的地方就是无法接收到全部数据,无论是
ServerSocket1.Socket.Connections[0].ReceiveBuf(mydata, sizeof(DC_DATA));
或者
ServerSocket1.Socket.Connections[0].ReceiveBuf(mydata, socket.ReceiveLength);
还是
ServerSocket1.Socket.Connections[0].ReceiveBuf(mydata, 100000);可实际接收的字节数最多只能是24760,不知道是不是受了什么机制所限(实际字节数为9万多)
指定一个长度吗?但是太大了浪费,太小了又可能不够,有更好的方法吗