Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TIdTCPServer meldet "Port is in use" bei allen Ports (https://www.delphipraxis.net/117113-tidtcpserver-meldet-port-use-bei-allen-ports.html)

xSkaschY 11. Jul 2008 18:45


TIdTCPServer meldet "Port is in use" bei allen Por
 
Hallo zusammen,

ich versuche nun schon seit Tagen ein TCP-Server zum laufen zu bekommen.

Jedoch meldet er bei beim starten immer "Port is in use", egal bei welchen Ports.

Unter Windows 2003 Server Enterprise sowie Windows Vista Ultimate.


Was läuft da falsch?


Delphi-Quellcode:
oTCPServer := TIdTCPServer.Create(nil);
try
   oTCPServer.DefaultPort := iPort;
   oTCPServer.Active     := True;
finally
   oTCPServer.Free; // Jaja, ich weiß is auch nur zum Test.
end;
nur mal so zum Beispiel wie ich das Ding initializiere.


LG Toby


EDIT: Indy 10.1.5

Die Muhkuh 11. Jul 2008 18:49

Re: TIdTCPServer meldet "Port is in use" bei allen
 
Hast inner Firewall einen Port für die Anwendung freigegeben?

xSkaschY 11. Jul 2008 18:51

Re: TIdTCPServer meldet "Port is in use" bei allen
 
Jop, hab zur Zeit den Port 2678 für meine Applikation freigegeben. Takes no Effect.

Edit: auch das deaktivieren der Firewall ist nicht die Lösung.

Edit2: Hier mal der vollständige Test Code:

Delphi-Quellcode:
program service_console;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  IdBaseComponent,
  IdComponent,
  IdCustomTCPServer,
  IdTCPServer,
  IdContext;
 
const
        iPort        = 2768;

var
        oTCPServer: TIdTCPServer;

procedure destroyServer;
begin
        oTCPServer.Free;
        Writeln('[' + TimeToStr(Now()) + ' - ' + DateToStr(Now()) + '] info -> Service stopped');
end;

begin
  try
        Writeln('[' + TimeToStr(Now()) + ' - ' + DateToStr(Now()) + '] info -> Service initialized');
        oTCPServer := TIdTCPServer.Create(nil);
        try
                oTCPServer.DefaultPort := iPort;
                try
                        oTCPServer.Active     := True;
                except
                        Writeln('[' + TimeToStr(Now()) + ' - ' + DateToStr(Now()) + '] info -> port ' + IntToStr(iPort) + ' is in use.');
                end;
                if oTCPServer.Active then
                        Writeln('[' + TimeToStr(Now()) + ' - ' + DateToStr(Now()) + '] info -> Service started on port ' + IntToStr(iPort));
        finally
                destroyServer;
        end;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.

Ausgabe:

[20:15:56 - 11.07.2008] info -> Service initialized
[20:15:56 - 11.07.2008] info -> port 2768 is in use.
[20:15:56 - 11.07.2008] info -> Service stopped

sx2008 11. Jul 2008 19:46

Re: TIdTCPServer meldet "Port is in use" bei allen
 
Das ist natürlich ungeschickt - du verdeckst die eigentliche Meldung komplett!!
Delphi-Quellcode:
try
  oTCPServer.Active     := True;
except
  Writeln('[' + TimeToStr(Now()) + ' - ' + DateToStr(Now()) + '] info -> port ' + IntToStr(iPort) + ' is in use.');
end;
Warum nicht so:
Delphi-Quellcode:
try
  oTCPServer.Active     := True;
except
  on E:Exception do
    Writeln('[' + FormatDateTime('yyyy-mm-dd hh:nn:ss', Now) + '] info -> ' + E.Message;
end;

SirThornberry 11. Jul 2008 19:55

Re: TIdTCPServer meldet "Port is in use" bei allen
 
angenommen der Fehler käme nicht, was sollte denn dann passieren? Wenn ich deinen Quelltext kurz überfliege gibst du die Komponente direkt nach dem aktivieren schon wieder frei in DestroyServer?! :gruebel:

xSkaschY 11. Jul 2008 21:01

Re: TIdTCPServer meldet "Port is in use" bei allen
 
Zitat:

Zitat von SirThornberry
angenommen der Fehler käme nicht, was sollte denn dann passieren? Wenn ich deinen Quelltext kurz überfliege gibst du die Komponente direkt nach dem aktivieren schon wieder frei in DestroyServer?! :gruebel:

Wer lesen kann ist klar im Vorteil.

Delphi-Quellcode:

   oTCPServer.Free; // Jaja, ich weiß is auch nur zum Test.

Zum dem Punkt möcht ich erstmal hin, deshalb gebe ich die Ressource wieder frei.


@sx2008

Interessant:

[22:00:57 - 11.07.2008] error -> You must have an OnExecute event.


Edit:

onExecute hinzugefügt und es lüppt. Jaja immer diese "fehler > /dev/null" :D


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz