Auf der Suche nach der Fehlermeldung fand ich diese Lösung: Die gesendete und empfangene Nachricht enden mit dem selben schließenden Tag. Deshalb funktioniert dies:
Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
TcpClient : TIdTcpClient;
begin
Memo1.Clear;
TcpClient := TIdTcpClient.Create(nil);
TcpClient.Host := 'fritz.box';
TcpClient.Port := 49000;
try
TcpClient.Connect;
if TcpClient.Connected
then begin
if TcpClient.IOHandler.Connected
then begin
TcpClient.IOHandler.Write(Memo3.Text);
Memo1.Text := TcpClient.IOHandler.WaitFor(Memo3.Lines.Strings[Memo3.Lines.Count - 1]);
Memo1.Lines.Add(Memo3.Lines.Strings[Memo3.Lines.Count - 1]);
end;
end;
finally
TcpClient.Disconnect;
TcpClient.Destroy;
end;
end;
Code:
HTTP/1.1 200 OK
DATE: Sun, 16 Jan 2011 00:20:28 GMT
SERVER: FRITZ!Box Fon WLAN 7320 UPnP/1.0 AVM FRITZ!Box Fon WLAN 7320 (UI) 100.04.88
CONNECTION: keep-alive
CONTENT-LENGTH: 430
CONTENT-TYPE: text/
xml; charset="utf-8"
EXT:
<?
xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/
soap/envelope/" s:encodingStyle="http://schemas.xmlsoap.org/
soap/encoding/"><s:Body>
<u:GetStatusInfoResponse xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
<NewConnectionStatus>Connected</NewConnectionStatus>
<NewLastConnectionError>ERROR_NONE</NewLastConnectionError>
<NewUptime>80745</NewUptime>
</u:GetStatusInfoResponse>
</s:Body>
</s:Envelope>
Das einzige, was etwas stört, sind die "falschen" Zeilenschaltungen im
XML.
Anscheinend ist es ein Fehler in der verwendeten
Indy-Version.