首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

为什么要让程序暂停上才可以正常接收

2012-07-23 
为什么要让程序暂停下才可以正常接收?Delphi(Pascal) codewith AdoQuery dobeginCloseSQL.Clearsql.Text

为什么要让程序暂停下才可以正常接收?

Delphi(Pascal) code
      with AdoQuery do      begin        Close;        SQL.Clear;        sql.Text :='select * from UserInfo where owner= '+Quotedstr(ClientSession.Owner);        Open;        while not Eof do        begin          SendClientSession.Name:=FieldByName('Name').AsString;          buffer[0]:=SSKReturnClinet;          CopyMemory(@buffer[SizeOf(byte)],@src,srclen);          CopyMemory(@buffer[SizeOf(byte)+srclen],@SendClientSession,SizeOf(TClientSession));          client.Send(@buffer,SizeOf(byte)+srclen+sizeof(TClientSession)) ;          Next;          Sleep(10);//暂停下才可以把所有的循环都发送出去,如果不加这句,那边只可以接收2个。        end;      end;


[解决办法]
连续发送时,可能多个数据合在一起发送了,假设依次发送A,B,C,接收的时候可能就会是这样,A,BC,这样的,看到你好象是带了长度的,接受的时候,根据长度判断一下,到底收到了几个,这里最好判断收到的长度,否则容易有溢出漏洞.
比如:接受到了5????3?? 那么就可以认为收到了2个数据包,分来处理就行了
还有一种可能:你检查一下send的返回值,如果是阻塞方式,返回值=SendLength才对,如果不等那就没提交成功.

看到这句:
SendClientSession.Name:=FieldByName('Name').AsString;
你的SendClientSession.Name 是定义成的String(n)这种吗?
如果是String/AnsiString/UnicodeString/WideString都是不行的。

热点排行