AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi delphi konsolen tcp server
Thema durchsuchen
Ansicht
Themen-Optionen

delphi konsolen tcp server

Ein Thema von chillywilly · begonnen am 1. Okt 2005 · letzter Beitrag vom 8. Feb 2006
Antwort Antwort
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
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: delphi konsolen tcp server

  Alt 1. Okt 2005, 18:58
Bei Francois Piette www.overbyte.be gibt es neben hervorragenden Komponenten rund um TCP / Sockets / HTTP etc auch ein Demoprojekt für einen Konsolen-HTTP Server. Da steht alles Drin, was Du wissen musst.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
chillywilly

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

Re: delphi konsolen tcp server

  Alt 1. Okt 2005, 19:14
wo da genau? ^^
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: delphi konsolen tcp server

  Alt 1. Okt 2005, 20:21
ICS runterladen und im Demo-Ordner ('Internet') das Projekt 'ConHttp' laden
Zitat von Francois Piette:
This demo shows how to use THttpCli component within a console mode application. It Connect to www.borland.com and display received (default) document on screen.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
chillywilly

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

Re: delphi konsolen tcp server

  Alt 2. Okt 2005, 15:24
Hi leute.
Also hab es geschafft, dass beim Ereignis OnListen etwas passiert. bei onclientconnect getsocket und disconnect passiert aber nichts. (der client sagt aber er sei verbunden :/)

help plz

Delphi-Quellcode:
procedure TApplication.procStart;
begin
 ServerSocket := TServerSocket.Create(nil);
 ServerSocket.OnListen := procSocketListen;
 ServerSocket.OnClientConnect := procSocketClientConnect;
 ServerSocket.OnClientDisconnect := procSocketClientDisconnect;

 ServerSocket.Port := 1234;
 ServerSocket.Open;
end;
  Mit Zitat antworten Zitat
chillywilly

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

Re: delphi konsolen tcp server

  Alt 4. Okt 2005, 19:00
Hiho Leute!
Ich hab mein Prog nun mit Threads gemacht und dachte eigentlich das es nun funktionieren würde.
Mir wurde gesagt es würde an dem readln liegen, da dies alles andere blockieren würde.
nun mit threads is das aber genau so
+ onlisten geht
+ alle anderen nich
+ connecten kann man

ich würd echt gerne mal wissen wo da der fehler is. bitte helft mir.

main program
Delphi-Quellcode:
// Programm : mice (multi interface chat engine)
// Version : 0.1
// Erstellt am : 03.10.2005
// Erstellt von: Michael Pawlik

// Geändert am : 04.10.2005
// 03.10.2005 - Programm erstellt.

program mice;

{$APPTYPE CONSOLE}

uses SysUtils, classes, unitLog, unitSettings, unitServer, ScktComp;

type TMain = class(TThread)
     private
     protected
      procedure Execute; override;
     public
      constructor create; virtual;
      procedure procLogAdd(econtent: string; etype: char);
      procedure procParseSettings;
      procedure procParseCmd(strCmd: string);
     end;

var main : TMain;
    logfile : TLog;
    setSettingsfile: TSettings;
    srvServer : TServer;

procedure TMain.Execute;
begin
 writeln('mice');
 procParseSettings;
 procLogAdd('server started','s');
end;

constructor TMain.create;
begin
  inherited create(true);
  freeOnTerminate := true;
end;

procedure TMain.procParseSettings;
begin
 setSettingsfile := TSettings.create('settings.cfg');
 writeln;
end;

procedure TMain.procLogAdd(econtent: string; etype:char);
begin
 logfile := TLog.create('log');
 logfile.procAddline(econtent,etype);
 logfile.free;
end;

procedure TMain.procParseCmd(strCmd: string);
begin
 if strCmd = 'statusthen

  if srvServer.FServerSocket.Active = true then begin
   writeln('* server is active');
  end else writeln('* server is not active')
  else if strCmd = 'exitthen
   procLogAdd('server is shutting down...','s')
   
  else writeln('X unknown command');
end;

var strCmdLn: string;
begin
 srvServer := TServer.create;
 srvServer.Priority := tpIdle;
 srvServer.resume;

 main := TMain.create;
 main.Priority := tpIdle;
 main.Resume;


 while strCmdLn <> 'exitdo begin
  readln(strCmdLn);
  main.procLogAdd('/rcon '+strCmdLn,'c');
  main.procParseCmd(strCmdLn);
 end;

 srvServer.Terminate;
 main.Terminate;
end.
server thread unit
Delphi-Quellcode:
// Unit Name : unitServer
// Version : 0.1
// Erstellt am : 04.10.2005
// Erstellt von: Michael Pawlik

// Geändert am : 04.10.2005
// Protokoll:
// 04.10.2005 - Unit erstellt.


unit unitServer;

interface

uses SysUtils, Classes, ScktComp, unitLog;

type TServer = class(TThread)
     private
     protected
      procedure Execute; override;
     public
      FServerSocket: TServerSocket;
      constructor create; virtual;
      procedure procServerOnListen(Sender: TObject;
        Socket: TCustomWinSocket);
      procedure procServerOnGetSocket(Sender: TObject; Socket: Integer;
        var ClientSocket: TServerClientWinSocket);
      procedure procServerOnClientConnect(Sender: TObject;
        Socket: TCustomWinSocket);
     end;

implementation

 procedure TServer.Execute;
 begin
 FServerSocket := TServerSocket.create(nil);
  with FServerSocket do begin
   OnListen := procServerOnListen;
   OnClientConnect := procServerOnClientConnect;
   OnGetSocket := procServerOnGetSocket;
   Port := 1234;
   ServerType := stNonBlocking;
   ThreadCacheSize := 10;
   Open;
  end;
 end;

 constructor TServer.create;
 begin
   inherited create(true);
   freeOnTerminate := true;
 end;

 procedure TServer.procServerOnListen(Sender: TObject;
   Socket: TCustomWinSocket);
 begin
  writeln('* onlisten: port['+inttostr(FServerSocket.Port)+']');
 end;

 procedure TServer.procServerOnGetSocket(Sender: TObject; Socket: Integer;
   var ClientSocket: TServerClientWinSocket);
 begin
  writeln('* ongetsocket: port['+inttostr(socket)+']');
 end;

 procedure TServer.procServerOnClientConnect(Sender: TObject;
   Socket: TCustomWinSocket);
 begin
  writeln('* ongconnect');
  socket.SendText('sdfsdf');
 end;

end.
  Mit Zitat antworten Zitat
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: delphi konsolen tcp server

  Alt 8. Feb 2006, 21:13
Hi,

habe gerade ein ähnliches Problem - bei einem Konsolen-Client. Ich kann mir das nur erklären, dass keine Events weitergeleitet werden.

Ich werde jetzt dann versuchen mit TranslateMessage und DispatchMessage die Nachrichten zu verarbeiten.
Wenn jmd. ne Idee hat wie wir dem SocketServer die Events weiterleiten können möge er es doch bitte schreiben.


bye, Daniel
Daniel
  Mit Zitat antworten Zitat
Zerolith

Registriert seit: 12. Mär 2003
Ort: Kempten
188 Beiträge
 
Delphi 6 Enterprise
 
#8

Re: delphi konsolen tcp server

  Alt 8. Feb 2006, 21:51
ok - bei mir hat sich das erledigt... hab an einer Stelle ein Synchronize das nicht so ganz will in ner Konsolenanwendung.
Daniel
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz