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.