TClientSocket関数から回復する文字数の長さを設定しようとしましたがReceiveText
、何も機能していないようです。たとえば、復元されたデータまたはその他のデータストリームから最初の左端の文字を受信します。この特定のオブジェクトを使用してDelphiでこれを実現する方法はありますか?
助けていただければ幸いです。前もって感謝します。
TClientSocket関数から回復する文字数の長さを設定しようとしましたがReceiveText
、何も機能していないようです。たとえば、復元されたデータまたはその他のデータストリームから最初の左端の文字を受信します。この特定のオブジェクトを使用してDelphiでこれを実現する方法はありますか?
助けていただければ幸いです。前もって感謝します。
ここにテキストを送受信するためのちょっとしたヒントがあります
まず、YouTubeのテキストの長さも送信する必要があります
Socket.SendText(IntToStr(Length(text)) + seperator + text);
次に、受信テキストが完全であるかどうか、データストリームの受信時にサーバーソケットで確認できます。
procedure TMyServer.OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
if (xRecLength = 0) then begin
if Length(Socket.ReceiveText) <= 0 then EXIT;
xRecLength:= StrToIntDef(GetFirstFromSplitted(Socket.ReceiveText, seperator), -1);
if xRecLength = -1 then EXIT;
end;
xActLength:= xActLength + Length(Socket.ReceiveText);
xRecPuffer:= xRecPuffer + Socket.ReceiveText;
isComplete:= xActLength = xRecLength;
if isComplete then begin
// complete text received
end;
end;
それがあなたを助けることを願っています...
ReceiveText
受信したテキストの最大長を制御する手段はありません。
ClientType := ctBlocking
モードでの最も簡単な方法はTWinSocketStream
、ドキュメントに記載されているようにを使用することです。
http://docwiki.embarcadero.com/VCL/XE2/en/ScktComp.TClientSocket.ClientType
ClientTypeがctBlockingの場合、読み取りと書き込みにTWinSocketStreamオブジェクトを使用します。TWinSocketStreamは、読み取りまたは書き込み中に問題が発生した場合に、アプリケーションが無期限にハングするのを防ぎます。また、ソケット接続が読み取りの準備ができていることを示すのを待つこともできます。
コード例:
var
Stream : TWinSocketStream;
Buffer : TBytes;
S : string;
begin
SetLength(Buffer, 100); // 100 bytes buffer size
Stream := TWinSocketStream.Create(Socket, 5000); // 5 seconds or 5000 milliseconds
try
Stream.ReadBuffer(Buffer[0], Length(Buffer)); // raises an Exception if it couldn't read the number of bytes requested
S := TEncoding.Default.GetString(Buffer); // Works in Delphi 2009+
finally
Stream.Free;
end;
end;
私はDelphiに慣れていませんが、Googleですばやく検索すると、このページが表示されReceiveText
、パラメータを受け入れず、代わりに読み取り可能な範囲の文字列が返されます。
代わりにReceiveBufが必要になる場合があります。