Einzelnen Beitrag anzeigen

Andreas_S

Registriert seit: 21. Aug 2008
Ort: Aachen
2 Beiträge
 
Turbo Delphi für Win32
 
#1

Client/Server Konsolenapplikation - unauffindbarer Fehler

  Alt 21. Aug 2008, 14:52
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
Andreas
  Mit Zitat antworten Zitat