Einzelnen Beitrag anzeigen

Alex_ITA01

Registriert seit: 22. Sep 2003
1.115 Beiträge
 
Delphi 12 Athens
 
#1

Socket Komponente im XE4 <-> Indy TCPClient XE7

  Alt 26. Feb 2015, 21:05
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
Let's fetz sprach der Frosch und sprang in den Mixer

Geändert von Alex_ITA01 (26. Feb 2015 um 21:09 Uhr) Grund: falsche Überschrift
  Mit Zitat antworten Zitat