首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >德尔福- TClientSocket ReceiveText MaxLen?

德尔福- TClientSocket ReceiveText MaxLen?
EN

Stack Overflow用户
提问于 2012-02-08 06:19:57
回答 3查看 4.4K关注 0票数 3

我一直在尝试设置从ReceiveText TClientSocket函数中恢复的字符数量的长度,但似乎没有任何效果。例如,从恢复的数据或其他数据流接收第一个最左边的字符。有没有办法在Delphi中使用这个特定的对象来完成这个任务?

我会很感激你的帮助。提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-08 17:42:35

ReceiveText没有任何方法来控制接收到的文本的最大长度。

ClientType := ctBlocking模式中最简单的方法是使用TWinSocketStream作为文档声明:

http://docwiki.embarcadero.com/VCL/XE2/en/ScktComp.TClientSocket.ClientType

当ClientType是ctBlocking时,使用TWinSocketStream对象进行读写。如果在读写过程中出现问题,TWinSocketStream将防止应用程序无限期挂起。它还可以等待套接字连接来指示其读取的准备状态。

示例代码:

代码语言:javascript
复制
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;
票数 1
EN

Stack Overflow用户

发布于 2012-02-08 07:58:03

以下是发送和接收文本的小tipp。

首先,您也必须发送yout文本的长度。

代码语言:javascript
复制
Socket.SendText(IntToStr(Length(text)) + seperator + text);

然后,您可以在接收数据流时检查服务器套接字,如果传入的文本已完成。

代码语言:javascript
复制
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;

希望这能帮你..。

票数 1
EN

Stack Overflow用户

发布于 2012-02-08 07:10:22

我不在家使用Delphi,但是一个快速的Google搜索发现了此页,它表明ReceiveText不接受任何参数,而是返回尽可能多的字符串。

您可能需要的可能是ReceiveBuf而不是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9188685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档