我是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 很简单...
- 将其实例拖放到您的表单上, 选择它。
- 在对象检查器中,转到 ProtocolVersion 属性,并设置它 到 pv1_0,然后打开其
- 请求属性设置,并设置 Request.ContentType 为 text/xml,以及 Request.ContentEncoding 为 UTF-8, 并设置其他属性,如果 必填。
- 向您的表单添加一个按钮并 双击它。
- 在您的代码中,创建一个实例 TStringStream,并加载您的 XML 内容。
- 将您的直播分配给 IdHttp.Request.Source。
- 通过给出调用 IdHttp.Get() 方法 它是一个主机地址。
- IdHttp.Get() 返回一个字符串,其中 是服务器发送给您的响应。
关于delphi - 当 IdTCPClient.IOHandler.ReadStream() 时连接正常关闭!,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4216675/