我在SeverSocket.ServerSocket1ClientRead事件里用
如下代码,多次调用SentText,但
ClientSocket.ClientSocket1Read事件被激发的次数总少于
SeverSocket.serverSocket1ClientRead里调用SentText的次数。在SeverSocket.ServerSocket1ClientRead里......
if ADOQuery5.RecordCount>0 then
     begin        ADOQuery5.First;
        for i:=0 to ADOQuery5.RecordCount-1 do
        begin
           sfzl:=trim(ADOQuery5.FieldbyName('bah').asstring)+'#bah'
          +trim(ADOQuery5.FieldbyName('xm').asstring)+'#xm'
          +trim(ADOQuery5.FieldbyName('zlt').asstring)+'#zlt'
          +trim(ADOQuery5.FieldbyName('ks').asstring)+'#ks'
          +trim(ADOQuery5.FieldbyName('ys').asstring)+'#ys'
          +trim(ADOQuery5.FieldbyName('times').asstring)+'#times';
          ServerSocket1.Socket.connections[m].SendText(sfzl);
          if  ADOQuery5.Eof=false then
            ADOQuery5.Next;
        end;
end;

解决方案 »

  1.   

    procedure TForm1.ClientSocket1Read(Sender: TObject;
      Socket: TCustomWinSocket);
    var
      TempS,SFZL,bah,xm,zlt,SQLString,tjt,sffk,KS,YS,times:string;
      Line,i,t:integer;
    begin
      sfzl:=ClientSocket1.Socket.ReceiveText;//收数据
        Line:=StringGrid1.RowCount-1;                   //将Sfzl分解插入StringGrid里
          StringGrid1.Cells[0,Line]:=' '+intTostr(Line);
          i:=Pos('#bah',SFZL);
          bah:=LeftStr(SFZL,i-1);
          StringGrid1.Cells[1,Line]:=bah;
          t:=i;
          i:=Pos('#xm',SFZL);
          xm:=copy(SFZL,t+4,i-(t+4));
          StringGrid1.Cells[2,Line]:=xm;
          t:=i;
          i:=Pos('#zlt',SFZl);
          zlt:=copy(SFZL,t+3,i-(t+3));
          t:=i;
          i:=Pos('#ks',SFZL);
          KS:=trim(copy(sfzl,t+4,i-(t+4)));
          t:=i;
          i:=Pos('#ys',SFZL);
          YS:=trim(copy(sfzl,t+3,i-(t+3)));
          t:=i;
          i:=pos('#times',sfzl);
          times:=trim(copy(sfzl,t+3,i-(t+3)));
          tjt:='';
          sffk:='';
          sfzl:='';
          stringGrid1.Cells[3,Line]:=times;
          StringGrid1.Cells[4,Line]:=zlt;
          StringGrid1.Cells[5,Line]:=ys;
          StringGrid1.RowCount:=StringGrid1.RowCount+1;
    end;
      

  2.   

    看不出什么,SORRY;不过如果SERVER发送速度慢些也许好点,加SLEEP看看如何?
      

  3.   


              ServerSocket1.Socket.connections[m].SendText(sfzl);
    后加上while t<5000 do
           t:=t+1 
    也不行,但是在
              ServerSocket1.Socket.connections[m].SendText(sfzl);
    后面加上showmessage(sfzl),就可以为什么
      

  4.   

    检查套节字是阻赛方式还是非阻赛方式,考虑到发送和接收、处理速度,建议如下方式:1, Server 一次发送多条记录,在发送文本前追加记录数供Client循环取数。
               注意包的长度不要超过40962, Client 根据接收记录数,循环取数,完成后反馈回制定标记的数据给Server端3, Server 收到Client反馈包,重复1,完成余下的数据发送。 GOOD LUCK
      

  5.   

    不能再详细了,言而总之: Client/Server每调用一次SendText/SendStream后,要等待对方发回反馈,保持同步!
      

  6.   

    TClientSocket and TServerSocket是基于TCP/IP协议的,又方有一个握手的过程。
    QQ就是一个很明显的例子。----------------------
    想女友...........