![]() |
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:
Beim Debuggen habe ich festgestellt, dass ClientSocket.Active permanent 'false' ist.
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; Doch woran sollte das liegen? Ich komme leider einfach nicht weiter... Grüße, Andreas |
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 |
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.
|
Re: Client/Server Konsolenapplikation - unauffindbarer Fehle
Hi,
wieso instanziierst Du 2 Serversockets ?
Delphi-Quellcode:
dein mSS sollte doch reichen.... der ist doch von TServerSocket abgeleitet.
ServerSocket := TServerSocket.Create(nil);
mSS := myServerSocket.Create; Gruss |
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 |
Re: Client/Server Konsolenapplikation - unauffindbarer Fehle
Zitat:
Ä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 19:43 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz