【发布时间】:2010-11-19 23:49:53
【问题描述】:
我是 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 在接收数据之前获得连接断开标志。
任何帮助将不胜感激!
【问题讨论】:
-
如果有一个运行良好的演示程序,我会使用网络嗅探器 (WireShark) 来查看它的作用,然后将通信流与 Delphi 应用程序进行比较。也可以使用像 Don's Proxy donsproxy.moneybender.com 这样的 HTTP 代理 - 可能比网络嗅探更容易。
-
同意。如果您没有设备实际协议的文档,那么数据包嗅探器是下一个最好的选择。
标签: delphi