Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Konsole und TServerSocket.Create -> Fehler (https://www.delphipraxis.net/48880-konsole-und-tserversocket-create-fehler.html)

SebE 1. Jul 2005 19:03


Konsole und TServerSocket.Create -> Fehler
 
Hallo,

ich wollte über eine Konsolenanwendung eine Socketverbindung herstellen (für ein Chatähnliches Programm).
hier ist erstmal der Code:

Delphi-Quellcode:
program MyChatServer;

{$APPTYPE CONSOLE}

uses
  SysUtils, ScktComp, Classes;

type
  TMainThread = class(TThread)
  public
    procedure Run;
  end;

  TServerThread = class(TThread)
    ServerSocket: TServerSocket;
    Port: Word;
    constructor Create;
    destructor Destroy;
    procedure OnServerAccept(Sender: TObject; Socket: TCustomWinSocket);
    procedure OnClientRead(Sender: TObject; Socket: TCustomWinSocket);
    procedure OnClientConnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure OnClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
    procedure OnServerShutDown(SendText: String);
  end;

var
  MainThread: TMainThread;
  ServerThread: TServerThread;

const
  PVersion='1.01.05';
  PName='MyChatServer';

{Mainthread}

procedure TMainThread.Run;
begin
Write(#7);
ReadLn;
end;

{ServerThread}

constructor TServerThread.Create;
begin
ServerSocket.Create(nil); //Hier tritt der Fehler auf!
inherited Create(False);
end;

destructor TServerThread.Destroy;
begin
ServerSocket.Destroy;
inherited Destroy;
end;

...

{Program}

begin
ServerThread:=TServerThread.Create;

with ServerThread do
begin
ServerSocket.OnAccept:=ServerThread.OnServerAccept;
ServerSocket.OnClientConnect:=ServerThread.OnClientConnect;
ServerSocket.OnClientDisconnect:=ServerThread.OnClientDisconnect;
ServerSocket.OnClientRead:=ServerThread.OnClientRead;
end;

WriteLn('MyChatServer');
WriteLn;
Write('Port: ');
ReadLn(ServerThread.Port);

ServerThread.ServerSocket.Active:=False;
ServerThread.ServerSocket.Port:=ServerThread.Port;

try
ServerThread.ServerSocket.Active:=True;
except
ServerThread.ServerSocket.Active:=False;
WriteLn('ERROR!');
end;

WriteLn('Server is running.');
ReadLn;

ServerThread.Destroy;
end.
Das Programm will einfach nicht laufen, es kommt immer eine Zugriffsverletzung. :pale:

Kennt jmd das Problem oder habt ihr schon mal mit so etwas gearbeitet?

Danke.

x000x 1. Jul 2005 20:15

Re: Konsole und TServerSocket.Create -> Fehler
 
Moin moin,

versuchs mal mit:
Delphi-Quellcode:
...

//ServerSocket.Create(nil); //Hier tritt der Fehler auf!
ServerSocket := TServerSocket.Create(nil);
...

SebE 1. Jul 2005 20:31

Re: Konsole und TServerSocket.Create -> Fehler
 
oh mein Gott.
Das ich da nicht von selbst drauf gekommen bin :roll:

Danke, hast natürlich recht.

Damit es funktioniert sieht mein Construktor so aus (für die, sie das gleiche Problem haben sollten):
Delphi-Quellcode:
constructor TServerThread.Create;
begin
inherited Create(True);
ServerSocket:=TServerSocket.Create(nil);
end;

Real_Thunder 10. Apr 2007 00:20

Re: Konsole und TServerSocket.Create -> Fehler
 
Habe hierzu mal eine Frage, ich versuche gerade ne serveranwendung über die console zu realisieren,
dazu habe ich mir den Source von oben mal kopiert, und die entsprechenen events eingesetzt wie z.b.

Delphi-Quellcode:
procedure TServerThread.OnClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
writeln('Client hat verbunden');
Socket.SendText('Moin Moin');
end;

Wenn ich die Anwendung Starte, meckert meine Firewall auch brav rum, und ich erlaube dem Programm anschließend die Ports abzuhören.

Bei der Clientanwendung, meckert er gleich rum mit socketfehler, also das er keine Verbindung herstellen kann....

Ist der Serverthrad denn schon soweit das er die Verbindungen Annhemen kann ?...
Ich stehe echt auch dem Schlauch..

Für einen Schups in die richtige Richtung währe ich dankbar.

MfG Real Thunder

mkinzler 10. Apr 2007 06:02

Re: Konsole und TServerSocket.Create -> Fehler
 
Laß mal ein Portmonitor laufen, dann siehst du, ob der Port geöffnet wurde.

Real_Thunder 10. Apr 2007 09:34

Re: Konsole und TServerSocket.Create -> Fehler
 
Ok, habe das Problem gelößt, da war noch ein portblocker (router firewall) zwichen...

Ich kann nun wunderbar verbinden.. Allerdings dann war es das auch schon....

auf die events reagiert der server überhaupt nicht..
weder auf onconnect noch auf onread etc etc.....


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:53 Uhr.

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