各位老大,我的问题很简单,在局域网上调试,一台装udp调试助手,我的程序在另一台上接收,问题是:对方必须连续发2次数据,且我这边只能收到第2次的数据,用状态条显示进行调试跟踪procedure TForm1.ServerUDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
txt:pchar;
count:integer;
fromip:string;
fromport:integer;
begin
count:=1024;
getmem(txt,1024);
zeromemory(txt,1024); statusbar1.SimpleText:='111';
server.ReceiveBuffer(txt^,count,fromip,fromport);//问题出在这里, statusbar1.SimpleText:='222';
memo2.Lines.Add(fromip+':'+inttostr(fromport)+' '+txt);end; 对方第1发送时,这边能状态条显示'111',然后对方再发一次数据,这时状态条显示'222',然后对方继续发送,状态条又是'111',然后又是'222'......
这就说明第1次接收是程序没有运行server.ReceiveBuffer(txt^,count,fromip,fromport);
到第2次接收时,server.ReceiveBuffer()运行了,但是第1次的数据没有接收,只接收了第2次的数据,
哪位能指点指点吗?
先谢了
ABinding: TIdSocketHandle);
var
txt:pchar;
count:integer;
fromip:string;
fromport:integer;
begin
count:=1024;
getmem(txt,1024);
zeromemory(txt,1024); statusbar1.SimpleText:='111';
server.ReceiveBuffer(txt^,count,fromip,fromport);//问题出在这里, statusbar1.SimpleText:='222';
memo2.Lines.Add(fromip+':'+inttostr(fromport)+' '+txt);end; 对方第1发送时,这边能状态条显示'111',然后对方再发一次数据,这时状态条显示'222',然后对方继续发送,状态条又是'111',然后又是'222'......
这就说明第1次接收是程序没有运行server.ReceiveBuffer(txt^,count,fromip,fromport);
到第2次接收时,server.ReceiveBuffer()运行了,但是第1次的数据没有接收,只接收了第2次的数据,
哪位能指点指点吗?
先谢了
如果第n次接收数据是2字节,而第n+1次突然有10字节,那么第n+1次收到的数据就只有2~3个字节,其余的字节就丢失了,
而如果第n次是10字节,而第n+1次差不多也是10个左右,那么第n+1次收到的数据就不会有丢失的现象,这是为什么?
是udp本身传输的局限吗?