在做Delphi開發時,使用Indy組件來做網絡通訊是一種比較快捷的方式。今天要說一下indy10中tcp接收數據的問題。
我們在測試時經常使用Wrinteln來發送數據,用Readln來接收數據。用這個兩個函數來測試Server端和Client端的通訊
是否正常。但在實際使用中我們很多時候發送的數據包都是比較復雜的,並不會帶有回車鍵。也有可能用來接收XML報文,
在報文中是可能包含多次的回車鍵的。這種情況下顯然沒有辦法用ReadLn來處理。
我們可以用以下方法來接收數據:
procedure TForm1.Button1Click(Sender: TObject);
var
xml:string;
buf:TIdBytes;
begin
if IdTCPClient1.Socket.Readable() then
begin
IdTCPClient1.Socket.ReadBytes(buf,-1); //第二個參數使用-1表示接收所有長度。因為我們並不知道要接收的數據到底有多長
xml:=BytesToString(buf);
end;
end;