![]() |
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:
Das Programm will einfach nicht laufen, es kommt immer eine Zugriffsverletzung. :pale:
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. Kennt jmd das Problem oder habt ihr schon mal mit so etwas gearbeitet? Danke. |
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); ... |
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; |
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 |
Re: Konsole und TServerSocket.Create -> Fehler
Laß mal ein Portmonitor laufen, dann siehst du, ob der Port geöffnet wurde.
|
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