Hallo zusammen,
ich habe folgendes Problem.
Ein kleines Programm schickt zwei Strings über eine TCPClient Komponente zu einem Server.
Das Programm liegt in zwei Varianten vor:
1)
XE4 Version mit der TCPClient Komponente aus der
Unit "Web.Win.Sockets" (TTcpClient).
RemoteHost und RemotePort werden gesetzt.
Ich prüfe mit dem Befehl "Connect" ob ich mich verbinden kann und wenn ja, dann sende ich
die beiden Strings jeweils raus.
Dieses Programm funktioniert ohne Probleme.
2)
XE7 Version mit der TIdTCPClient Komponente der mitgelieferten
Indy.
Grund: Es gibt die eingesetzte Komponente aus der XE4 Version nicht mehr.
Host und Port werden gesetzt.
Ich prüfe mit dem Befehl "if Connected" ob ich verbunden bin und wenn ja, dann sende ich
die beiden Strings jeweils raus. Wenn nein, rufe ich "Connect" auf und versuche dann nochmal auf "Connected" abzufragen.
Dieses Programm funktioniert auf meinem Rechner ohne Probleme.
Leider funktioniert das Programm auf zwei anderen Rechnern nicht wie bei mir und ich weiß nicht warum.
Es treten Exceptions beim Senden des jeweiligen Strings auf.
Fehlermeldung: Die Verbindung wurde erfolgreich geschlossen.
Bei jedem Sendebefehl.
Was mich wundert, bei mir auf dem Rechner funktioniert es (habe einem anderen Rechner die
IP gegeben und das Programm ncat darauf gestartet und den entsprechenden Port geöffnet. Da kommt der String an. Keine Exceptions.
Bei zwei anderen Rechnern, entstehen die genannten Exceptions und es kommt auch kein String (Text) an.
Hättet ihr eine Idee dazu?
Source Ausschnitt Programm XE4:
Delphi-Quellcode:
SocketErr := False;
try
try
if Connect
then
begin
try
SendBuf(PAnsiChar(MyStr1)^, Length(MyStr1), 0);
except
on E:
Exception do
begin
//Protokollierung E.Message
SocketErr := True;
end;
end;
try
SendBuf(PAnsiChar(MyStr2)^, Length(MyStr2), 0);
except
on E:
Exception do
begin
//Protokollierung E.Message
SocketErr := True;
end;
end;
end
else
begin
//Protokollierung Connect nicht möglich
end;
except
on E:
Exception do
begin
//Protokollierung E.Message
SocketErr := True;
end;
end;
finally
if SocketErr
then
begin
//Protokollierung SocketErr erkannt
end;
try
Disconnect;
except
on E:
Exception do
begin
//Protokollierung E.Message
end;
end;
end;
Source Ausschnitt Programm XE7:
Delphi-Quellcode:
SocketErr := False;
try
try
if not Connected
then
begin
try
//Protokollierung not Connected
Connect;
except
on E:
Exception do
begin
//Protokollierung E.Message
SocketErr := True;
end;
end;
end;
except
on E:
Exception do
begin
//Protokollierung E.Message
SocketErr := True;
end;
end;
try
if Connected
then
begin
if Assigned(TCPClient.IOHandler)
then
begin
try
TCPClient.IOHandler.WriteLn(MyStr1);
except
on E:
Exception do
begin
//Protokollierung E.Message
//Hier kommt die Protokollierung "Die Verbindung wurde erfolgreich geschlossen."
SocketErr := True;
end;
end;
try
TCPClient.IOHandler.WriteLn(MyStr2);
except
on E:
Exception do
begin
//Protokollierung E.Message
//Hier kommt die Protokollierung "Die Verbindung wurde erfolgreich geschlossen."
SocketErr := True;
end;
end;
end
else
begin
//Protokollierung IOHandler nicht initialisiert
end;
end
else
begin
//Protokollierung Connect nicht möglich
end;
except
on E:
Exception do
begin
//Protokollierung E.Message
SocketErr := True;
end;
end;
finally
if SocketErr
then
begin
//Protokollierung SocketErr erkannt
end;
try
Disconnect;
except
on E:
Exception do
begin
//Protokollierung E.Message
end;
end;
end;
Ich hoffe ihr könnt mir da weiterhelfen.
Viele Grüße