while not Terminated and ClientSocket.Connected do
    begin
      Stream := TWinSocketStream.Create(ClientSocket, 60000);
      ZeroMemory(@Send_info,SizeOf(Send_info));
      ZeroMemory(@Rece_info,SizeOf(Rece_info));
      if Stream.WaitForData(60000) then
      begin
        Stream.Read(rece_info,SizeOf(Rece_info));
        // 20090531 zhch
        FrmMainMSOCKET.richedit.Lines.Add(inttostr(Rece_info.SendSize));
        FrmMainMSOCKET.richedit.Lines.Add(Rece_info.SendType);
        FrmMainMSOCKET.richedit.Lines.Add('********************');
        if Rece_info.SendType = '' then
        begin
          FrmMainMSOCKET.richedit.Lines.Add('nnnnnnnn');
          continue;
        end;
        Rece_SendType := StrToInt(Rece_info.SendType);

解决方案 »

  1.   


    procedure TfrmMain.SendPackage;
    var
      Buf:array[0..1023] of char;
    begin
      if StreamSize >= BufSize then
      begin
        SendRealSize := BufSize     ;
        MemUpLogs.Lines.Append('aa1*'+inttostr(SendRealSize))  ;
      end else
      begin
        SendRealSize := StreamSize;
        MemUpLogs.Lines.Append('aa2*'+inttostr(SendRealSize))  ;
      end;
      MemoryStream.ReadBuffer(Buf,SendRealSize);
      Move(Buf,Send_info.senddata,SendRealSize);
      StreamSize := StreamSize - SendRealSize;
      MemUpLogs.Lines.Append('aa3*'+inttostr(StreamSize))  ;
      if StreamSize = 0 then
      begin
        with Send_info do
        begin
          MemUpLogs.Lines.Append('aa4*'+inttostr(StreamSize))  ;
          Move('11',SendType,SizeOf(SendType));
          MemUpLogs.Lines.Append('aa5*'+SendType)  ;
          SendSize := SendRealSize;
          MemUpLogs.Lines.Append('aa6*'+inttostr(SendSize))  ;
    //      SendType := '11';
    //      SendSize := SendRealSize;
        end;
        MemoryStream.Free;
      end else
      begin
        with Send_info do
        begin
          MemUpLogs.Lines.Append('aa7*'+inttostr(StreamSize))  ;
          Move('10',SendType,SizeOf(SendType));
          MemUpLogs.Lines.Append('aa8*'+SendType)  ;
          SendSize := SendRealSize;
          MemUpLogs.Lines.Append('aa9*'+inttostr(SendSize))  ;
    //      SendType := '10';
    //      SendSize := SendRealSize;
        end;
      end;  
      try
        MemUpLogs.Lines.Append('aa10*'+inttostr(Send_info.SendSize))  ;
        C_Socket.Socket.SendBuf(Send_Info,SizeOf(Send_info));
        MemUpLogs.Lines.Append('aa11*'+inttostr(Send_info.SendSize))  ;
        MemUpLogs.Lines.Append('aa12*'+Send_info.SendType)  ;
      except
        C_Socket.Active := False;
      end;end;
    执行 C_Socket.Socket.SendBuf(Send_Info,SizeOf(Send_info));后服务端接收到两个流,一个是有数据的,另一个流为空,为什么会这样,经测试客户端直接向中心传数据不会出现此情况,而客户端将非本机数据往中心传时才会出现上述情况,请高手指点,谢谢