Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Client/Server Konsolenapplikation - unauffindbarer Fehler (https://www.delphipraxis.net/119177-client-server-konsolenapplikation-unauffindbarer-fehler.html)

Andreas_S 21. Aug 2008 14:52


Client/Server Konsolenapplikation - unauffindbarer Fehler
 
Hallo Leute!

Ich habe über 2 Stunden die Hilfe bemüht, bin aber nicht schlauer als vorher...

Aufgabenstellung: Eine Konsolenapplikation die per Parameter den Port (+ Host) übergeben bekommt. Je nach Parameter also Server bzw. Client ist.

Mein Server läuft brav, aber der Client bekommt keine Verbindung hin (anscheinend).
Über netstat -a sehe ich, dass auf dem Server-Port eine Anwendung abhört.


Vielleicht findet ja jemand den Fehler:
Code:
type
myServerSocket = class(TServerSocket)
public
  constructor Create;
  procedure ClientRead(Sender: TObject; Socket: TCustomWinSocket);
end;

procedure myServerSocket.ClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  s                : string;
begin
  s := Socket.ReceiveText;
  WriteLn('Server recieved: ' + s);
end;

[...]
// Auszug aus Main-Prozedur der Konsole

// Server
  if ActAsServer then
  begin
    try
      begin
        ServerSocket := TServerSocket.Create(nil);
        mSS := myServerSocket.Create;
        ServerSocket.Port := PortNumber;
        ServerSocket.OnClientRead := mSS.ClientRead;
        ServerSocket.Active := true;

        // Wait for connection
        while true do
        begin
          WriteLn(Format('Waiting for client to connect <Active %d>', [ord(ServerSocket.Active)]));
          if not ServerSocket.Active then
            ServerSocket.Active := true;
          Sleep(500);
        end;
      end;
    except on e: exception do
        WriteLn(Format('Server raised exception <%s>', [e.Message]));
    end;
    // Close connections
    if ServerSocket <> nil then
      ServerSocket.Active := false;
    FreeAndNil(ServerSocket);



// Client
  if ActAsClient then
    begin
      try
        begin
          ClientSocket := TClientSocket.Create(nil);
          ClientSocket.Port := PortNumber;
          ClientSocket.Host := ServerIP;
          ClientSocket.Active := true;
   
          // Send data
          while not Eof(txtFile) do
          begin
            ReadLn(txtFile, s);
              ClientSocket.Socket.SendText(s);
          end;
        end;
      except on e: Exception do
          WriteLn(Format('Client raised exception <%s>', [e.Message]));
      end;
      // Close connections
      if ClientSocket <> nil then
        ClientSocket.Active := false;
      FreeAndNil(ClientSocket);
    end;
Beim Debuggen habe ich festgestellt, dass ClientSocket.Active permanent 'false' ist.
Doch woran sollte das liegen? Ich komme leider einfach nicht weiter...


Grüße,
Andreas

Zacherl 22. Aug 2008 06:08

Re: Client/Server Konsolenapplikation - unauffindbarer Fehle
 
Da du alles von Hand instanzierst vermute ich mal, dass es sich um eine Konsolenanweundung handelt oder du kein TForm verwendest. Richtig?

In diesem Falle brauchst du eine eigene Nachrichteschleife mit GetMessage, TranslateMessage, DispatchMessage.

Gruß Zacherl

sirius 22. Aug 2008 07:14

Re: Client/Server Konsolenapplikation - unauffindbarer Fehle
 
Du könntest auch erst einmal probieren den Clienttype auf blockierend zu stellen. Das ist für eine Konsolenanwendung eher angebracht (wenn die Socketkomponenten das auch so implementieren wie ich vermute). Damit entfällt die Messagebehandlung und du kannst auch dein sleep rausschmeißen.

thkerkmann 22. Aug 2008 08:09

Re: Client/Server Konsolenapplikation - unauffindbarer Fehle
 
Hi,

wieso instanziierst Du 2 Serversockets ?
Delphi-Quellcode:
        ServerSocket := TServerSocket.Create(nil);
        mSS := myServerSocket.Create;
dein mSS sollte doch reichen.... der ist doch von TServerSocket abgeleitet.

Gruss

Andreas_S 22. Aug 2008 08:16

Re: Client/Server Konsolenapplikation - unauffindbarer Fehle
 
Danke für die Antworten!

Ich habe mich noch mehrere Stunden mit dem Problem beschäftigt und dann das ganze auf eine Form umgebaut. Funktioniert natürlich auf Anhieb...
Ich kapiers zwar nicht so genau, aber das Projekt ist zu klein um sich da zu lang Gedanken zu zu machen...

Dennoch danke für die Hilfe :)


Grüße

Bernhard Geyer 22. Aug 2008 08:19

Re: Client/Server Konsolenapplikation - unauffindbarer Fehle
 
Zitat:

Zitat von Andreas_S
Ich habe mich noch mehrere Stunden mit dem Problem beschäftigt und dann das ganze auf eine Form umgebaut. Funktioniert natürlich auf Anhieb...
Ich kapiers zwar nicht so genau, aber das Projekt ist zu klein um sich da zu lang Gedanken zu zu machen...

Könnte es sein das die Implementierung der Komponente ein Fensterhandle zur kommunikation benötigt und ohne Parent mit Fensterhandle einfach im Wald steht :gruebel:
Ähnliches Verhalten mit "geht nicht" kenne ich von TWebBrowser wemm man ihn nicht auf ein TForm legt und diese mit HandleNeeded mit gültigen Fensterhandle versorgt.


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