Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Consolen Server Problem (https://www.delphipraxis.net/37754-consolen-server-problem.html)

fadz 9. Jan 2005 19:33


Consolen Server Problem
 
Hier mal der Code:

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ScktComp;

type
  test=class
public
  //socket: Tserversocket;
  procedure socketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  procedure socketClientError(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure go;
    procedure SocketClientConnect;
end;

var socket: Tserversocket;
    e1,cmd: string;
    test1: test;

procedure test.socketClientError(Sender: TObject;
      Socket: TCustomWinSocket);
begin
writeLn('test');
end;

procedure test.socketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
var cmd: string;
begin
writeLn('GEHT DOCH');
cmd:=socket.ReceiveText;
writeLn(cmd);
//socket.free;
end;

procedure test.SocketClientConnect;
begin
writeLn('TEST');
end;

procedure test.go;
begin
socket:=tserversocket.Create(nil);
  writeLn('PleaseEnterPort');
  readln(e1);
//  try
  //socket.Active:=false;
  socket.Port:=strtoint(e1);
  socket.ServerType:=stNonBlocking;
  socket.OnClientRead := socketClientRead;
  socket.OnClientConnect := SocketClientError;
  socket.OnClientDisconnect := SocketClientError;
  //
  socket.Open;
  socket.Active:=true;
//  except
//  socket.Free;
//  end;
//  readln;
end;


begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
   //readln;
   //test1.Create;
   test1.go;
   readln;
   test1.Destroy;
end.
nun meine frage,
warum empfange ich nichts ??
bzw. bekomme nicht mit wenn jemand connected ect.

thx für eure hilfe

Muetze1 9. Jan 2005 22:28

Re: Consolen Server Problem
 
Moin!

Vielleicht weil du die Klasse Test nirgendwo instanziierst? Wenn du das nicht machen willst, dann definiere die Proceduren für die Events und die anderen als Class Procedure. Wenn nicht musst du im anderen Falle vor dem test1.go Aufruf noch ein
Delphi-Quellcode:
  test1 := test.Create;
machen.

MfG
Muetze1

fadz 11. Jan 2005 15:57

Re: Consolen Server Problem
 
hab ich gemacht,
geht aber immer noch nicht,
was nun ?

r4id3n 11. Jan 2005 16:04

Re: Consolen Server Problem
 
//test1.Create;
^^ Ich hoffe du hast die Klasse nicht so erzeugt!!!!
test1:=test.create;
^^ So sollte das richtig sein!

test1.Destroy;
^^ Auch sowas macht man nicht!

test1.free;
^^ "Besser"

fadz 12. Jan 2005 13:41

Re: Consolen Server Problem
 
hab ich, aba es geht noch nicht, hier nochmals der aktuelle code:

Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  ScktComp;

type
  test=class
public
  //socket: Tserversocket;
  procedure socketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
  procedure socketClientError(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure go;
    procedure SocketClientConnect;
end;

var socket: Tserversocket;
    e1,cmd: string;
    test1: test;

procedure test.socketClientError(Sender: TObject;
      Socket: TCustomWinSocket);
begin
writeLn('test');
end;

procedure test.socketClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
var cmd: string;
begin
writeLn('GEHT DOCH');
cmd:=socket.ReceiveText;
writeLn(cmd);
//socket.free;
end;

procedure test.SocketClientConnect;
begin
writeLn('TEST');
end;

procedure test.go;
begin
socket:=tserversocket.Create(nil);
  writeLn('PleaseEnterPort');
  readln(e1);
//  try
  //socket.Active:=false;
  socket.Port:=strtoint(e1);
  socket.ServerType:=stNonBlocking;
  socket.OnClientRead := socketClientRead;
  socket.OnClientConnect := SocketClientError;
  socket.OnClientDisconnect := SocketClientError;
  //
  socket.Open;
  socket.Active:=true;
//  except
//  socket.Free;
//  end;
//  readln;
end;


begin
  { TODO -oUser -cConsole Main : Hier Code einfügen }
   //readln;
   //test1.Create;
   test1:=test.Create;
   test1.go;
   readln;
   test1.free;
end.

Muetze1 12. Jan 2005 23:00

Re: Consolen Server Problem
 
Moin!

Er steht die ganze Zeit im ReadLn() und wartet auf Eingabe - daher: wie sollte da denn noch der TServerSocket zum Zuge kommen können ohne ein wenig Rechenzeit zu bekommen? Vor allem hast du eine Konsolenanwendung und daher hast du keinen VCL Thread der immer wieder die Steuerung bekommt bzw. auch mal den TServerSocket Thread ranlässt. Daher hast du eigentlich schlechte Chancen hier überhaupt mal einen CallBack zu erhaschen.

So sehe ich das... ... was meinen die anderen geneigten Leser dazu?

MfG
Muetze1

/EDIT: Rechtschreibfehler beseitigt

SirThornberry 12. Jan 2005 23:21

Re: Consolen Server Problem
 
@Muetze: Genau so ist es.

fadz 13. Jan 2005 15:53

Re: Consolen Server Problem
 
ok, gibts denn auch eine lösung für das problem ? ;)

thx


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 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