Delphi---TServerSocket和TClientSocket發送和接收大數據包


https://www.cnblogs.com/zhangzhifeng/p/6065244.html

 

TServerSocket和TClientSocket用非阻塞模式發送和接收比較大的數據時,可能一次會接收不完,此時需要通過循環接收。

 

//接收

procedure TMAINFORM.TCPServer1ClientRead(Sender: TObject;
  Socket: TCustomWinSocket);
var
  iLength,I,iStart, iRevCount: Integer;
  iReceived: Integer;
  buff: array of byte;
  S:STRING;
begin
   S:='';
   iStart := 0;
   iLength:= Socket.ReceiveLength;
   iRevCount := iLength; //這里加入的
    SetLength(buff, iLength);
    MEMO1.Lines.Add(INTTOSTR(ILENGTH));
   while iLength>0 do
   begin
     iReceived := Socket.ReceiveBuf(buff[iStart], iLength); //這里修改了注意
      iStart := iStart + iReceived ; //這里加入的
     iLength := iLength - iStart;
   end;
   //下面你的iLength 使用 iRevCount 替換了
   FOR I:=0 TO iRevCount -1 DO
     BEGIN
       S:=S+INTTOSTR(BUFF[I]);
     END;
   MEMO1.Lines.Add(S);
   buff:= nil;
end;

  

發送:Socket.SendBuf

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM