Einzelnen Beitrag anzeigen

SebE

Registriert seit: 31. Jul 2004
Ort: Chemnitz
316 Beiträge
 
Delphi 7 Personal
 
#1

Konsole und TServerSocket.Create -> Fehler

  Alt 1. Jul 2005, 20:03
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.

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

Danke.
Sebastian
  Mit Zitat antworten Zitat