Einzelnen Beitrag anzeigen

chillywilly

Registriert seit: 1. Okt 2005
11 Beiträge
 
#1

delphi konsolen tcp server

  Alt 1. Okt 2005, 18:25
Hiho!
Hab nen Problem bei meinem Versuch nen Konsolenprogramm zu schreiben, welches als Chatserver dienen soll. Also verbindung herstellen geht wunderbar. nur würde ich gerne wissen wie der server daten zum client senden kann und wie ich auf ereignisse vom TServerSocket reagieren kann. (also zum beispiel OnGetSocket oder so)

wäre cool wenn ihr mir helfen könntet.

project
Delphi-Quellcode:
program mice_server;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  mice_main in 'mice_main.pas';

var strTemp: string;
begin
 mice_main.MainApp.procMain;
 
 repeat
  write('# ');
  readln(strTemp);
  mice_main.MainApp.procParseCommandline(strTemp);
 until lowercase(strTemp) = 'exit';
 
end.
unit
Delphi-Quellcode:
unit mice_main;

interface

uses SysUtils,
     ScktComp;

type
 TMainApp = class
  private
  public
      procedure procMain;
      procedure procError(intErrorID: integer);
      procedure procParseCommandline(strRaw: string);
      function funcRunServer: integer;
  end;

var MainApp : TMainApp;
    ServerSocket: TServerSocket;

implementation

procedure TMainApp.procError(intErrorID: integer);
var strErrorMessage: string;
begin
 case intErrorID of
 0: strErrorMessage := 'error during server start'
 else
  strErrorMessage := 'unknown error';
 end;
 writeln('! err: ['+inttostr(intErrorID)+'] '+strErrorMessage);
end;

procedure TMainApp.procMain;
var intErr: integer;
begin
 TMainApp.Create;
 writeln('> run mice');
 intErr := funcRunServer;

 if intErr <> 0 then procError(intErr)
 else writeln('> socket opened');
end;

function TMainApp.funcRunServer: integer;
begin
 ServerSocket := TServerSocket.Create(nil);
 ServerSocket.Port := 1234;
 ServerSocket.Open;

 result := 0;
end;

procedure TMainApp.procParseCommandline(strRaw: string);
var strCommand, strResult: string;
begin
 if pos(#32, strRaw)<>0 then
  strCommand := LowerCase(copy(strRaw,0,pos(#32, strRaw)-1))
 else strCommand := LowerCase(copy(strRaw,0,length(strRaw)));

 if strCommand = 'infothen
  strResult := 'multi interface chat engine - (c) 2005 Michael Pawlik'

 else if strCommand = 'sendthen
  if ServerSocket.Active then
   ServerSocket.Socket.Connections[0].SendText('test ^^')
  else strResult := 'server is not active'

 else if strCommand = 'statusthen
  if ServerSocket.Active then strResult := 'server is active on port '+inttostr(ServerSocket.Port)
  else strResult := 'server is not active'

 else if strCommand = 'openthen
  if not(ServerSocket.Active) then begin
   ServerSocket.Open;
   strResult := 'socket opened'
  end else
   strResult := 'server is already active'

 else if strCommand = 'closethen
  if ServerSocket.Active then begin
   ServerSocket.Close;
   strResult := 'socket closed'
  end else
   strResult := 'server is not active'

 else if strCommand = 'exitthen
  strResult := 'shutting down'
 else strResult := 'unknown command: '+strCommand;
 writeln('> '+strResult);
end;

end.
  Mit Zitat antworten Zitat