delphi - 当 IdTCPClient.IOHandler.ReadStream() 时连接正常关闭!

标签 delphi

我是delphi新手,这是我的第一个项目。 这是一些代码:

procedure TForm1.Button2Click(Sender: TObject);
responseStringFromServer:TStringStream;
begin
 try
  if IdTCPClient1.Connected then
   begin
    dataSentToDevice:= 'http/1.0 content-length: 344 content-type: text/xml <?xml          version="1.0" encoding="UTF-8" ?> ...'
   IdTCPClient1.IOHandler.WriteLn(dataSentToDevice);
   responseStringFromServer := TStringStream.Create;
    IdTCPClient1.IOHandler.ReadStream(responseStringFromServer);
    ...

我有一个设备连接到本地网络。我设法成功连接到它。发送命令也可以,但是当我这样做时

IdTCPClient1.IOHandler.ReadStream(responseStringFromServer);

然后它会等待,直到设备完成处理并发生异常:“连接正常关闭”。所以我无法读取设备应该发送给我的数据。设备未关闭。我读过其他帖子,我知道设备本身会断开连接。

我有一个可以与其通信的演示程序,并且运行良好。我需要在断开连接之前获取响应 xml。

请求也是http,我正在使用IdTCPClient(我需要使用xml请求,我不知道如何使用TidHTTP来做到这一点)。 可能是设备发送响应后断开连接,以便我的 tcpclient 在接收数据之前获得连接断开标志。

如有任何帮助,我们将不胜感激!

最佳答案

Also the request is http and i am using IdTCPClient (i need to use xml request, i don't know how to do it with TidHTTP).

使用 IdHTTP 很简单...

  1. 将其实例拖放到您的表单上, 选择它。
  2. 在对象检查器中,转到 ProtocolVersion 属性,并设置它 到 pv1_0,然后打开其
  3. 请求属性设置,并设置 Request.ContentType 为 text/xml,以及 Request.ContentEncoding 为 UTF-8, 并设置其他属性,如果 必填。
  4. 向您的表单添加一个按钮并 双击它。
  5. 在您的代码中,创建一个实例 TStringStream,并加载您的 XML 内容。
  6. 将您的直播分配给 IdHttp.Request.Source。
  7. 通过给出调用 IdHttp.Get() 方法 它是一个主机地址。
  8. IdHttp.Get() 返回一个字符串,其中 是服务器发送给您的响应。

关于delphi - 当 IdTCPClient.IOHandler.ReadStream() 时连接正常关闭!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216675/

相关文章:

delphi - 如何在 Delphi 10.2 中使用接口(interface)方法作为方法类型的参数

delphi - 为什么使用 Delphi 2010 的内置 Indy 发行版会出现编译器错误?

delphi - 如何捕获并打开拖放到应用程序图标上的文件?

Delphi:如何在 TEdit/TMaskEdit 中设置文本而不调用 onchange 事件

delphi - 64位Delphi桌面应用程序可以通过Windows 8.1认证吗

德尔福 : How to use Format() with runtime-built array of TVarRec?

delphi - Delphi中TRichEdit的滚动问题

sql-server - Delphi XE 中从 SQL 日期转换为日期时间

delphi - 如何从 IIS ISAPI 的 GetExtensionVersion 中获取我网站的 URL?

string - Delphi:64 位快速 Pos