Je suis nouveau à delphi et ceci est mon premier projet. est ici un peu de code:Connexion fermée gracieusement lorsque IdTCPClient.IOHandler.ReadStream()!
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);
...
J'ai un appareil connecté au réseau local. Je parviens à me connecter avec succès. L'envoi de commandes travaille aussi, mais quand je fais
IdTCPClient1.IOHandler.ReadStream(responseStringFromServer);
il attend jusqu'à ce dispositif se fait le traitement et une exception se produit: « Connexion refermées ». Donc, je ne suis pas capable de lire les données que l'appareil est censé m'envoyer. L'appareil ne s'arrête pas. J'ai lu d'autres articles et je comprends que l'appareil lui-même supprime la connexion. J'ai un programme de démo qui communique avec lui et ça fonctionne très bien. J'ai besoin d'obtenir une réponse xml avant de laisser tomber la connexion.
Aussi la demande est http et j'utilise IdTCPClient (j'ai besoin d'utiliser la requête XML, je ne sais pas comment le faire avec TidHTTP). Peut-être qu'après que le périphérique envoie une réponse, il abandonne la connexion, de sorte que mon tcpclient obtienne un indicateur de connexion interrompue avant de recevoir des données.
Toute aide serait appréciée!
S'il y a un programme de démonstration qui fonctionne bien, j'utiliserais un sniffer de réseau (WireShark) pour voir ce qu'il fait et ensuite comparer le flux de communication avec l'application Delphi. Un proxy HTTP comme Don's Proxy http://donsproxy.moneybender.com/ peut également être utilisé - peut-être plus facile que le sniff réseau. – mjn
Convenu. Si vous n'avez pas de documentation pour le protocole actuel de l'appareil, alors un renifleur de paquets est la meilleure chose à faire. –