事情比较紧急,望大家能伸一把手“Idtcpclient怎么清除接收缓冲区里面的数据呀”? ( 积分: 100 )

  • 主题发起人 主题发起人 foreach
  • 开始时间 开始时间
F

foreach

Unregistered / Unconfirmed
GUEST, unregistred user!
收下来,再丢掉,就清空了
 
我的意思是有些数据我不需要,就把他们清空了。
 
d_eng说的没错阿,收下来就行了,不过,就是不用把他付给其他变量就行了
 
关键是接收区的内容比较复杂:
第一次是: 12 EF DE FE C3 D9
第二次是:4E F4 E2 D8 9C 25
用READLN吗?怎么能读出能?
 
楼主,对不起,刚才我的电脑出现硬件问题,经过一顿折腾后,总算好了。
一般不存在清除接收缓冲区的问题,即便清除,也只是INDY这样的应用层而已,更底层的数据清除还是无法处理。
正常情况下,软件中系统自己有开辟一个线程,一直循环接收发送来的数据,当然,接收来的数据你可以不去处理,关键是客户端与服务器的命令约定。
楼主实在要清除,可以试试以下方法(但好象=0应该使用的是默认缓冲大小):
IdTCPClient1.RecvBufferSize:=0;
sleep(10);
IdTCPClient1.RecvBufferSize:=1024;

最笨的方法是
IdTCPClient1.Disconnect;
IdTCPClient1.Connect();
 
CurrentReadBuffer;
 
定义一个MsgLength的变量来标识接受到的数据,然后修改这个变量来处理接收缓冲区。如果把这个变量设为0就相当于清空了你的接收Buffer了。
var msgLength:Integer;
msgBuffer:array[0..2039]of Byte;
begin
......
try
msgLength:=FormMain.myClient.Socket.Recv(msgBuffer,SizeOf(msgBuffer));
//msgLength就是此次收到的实际信息长度
if msgLength<1 then
FormMain.myClient.ReadBuffer(msgBuffer,3)
else
{do something you want}
except
;
end;
......
end;
 
关键是接收区的内容比较复杂:
第一次是: 12 EF DE FE C3 D9
第二次是:4E F4 E2 D8 9C 25
用READLN吗?怎么能读出能?
___________________________________
1)收到什么东西你自己不知道?
2)readln不行的话,你用readbuff
 
我读出来的东西是16进制,它是一串中文,但是显示却是
. ...:=?U9+K>J9SCWT%63v'F'JO^.., ..Gk<l$i..b.
怎么处理这样的问题呀?
 
楼上多位兄弟:新的INDY10里面已经没有READBUFFER了
 
1)难道indy10只有readln?
2)对方以什么格式发,你用相应的方法解析
所以你先要搞清促,它是以什么方式将中文发过来的
 
后退
顶部