![]() |
TServerSocket will nicht :(
Hi Leute,
ich bekomme die TServerSocket-Komponente in einer Konsolen-Anwendung einfach nicht zum laufen. Auf INDY-Komponenten kann ich nicht wechseln da Indy nur synchrone Sockets benutzt, ich aber asynchrone Sockets brauche. Hier mein Source:
Delphi-Quellcode:
Program Project2;
{$APPTYPE CONSOLE} Uses SysUtils, ScktComp; Type TMyApp = Class(TObject) Public Procedure Connect(Sender: TObject; Socket: TCustomWinSocket); Procedure Disconnect(Sender: TObject; Socket: TCustomWinSocket); Procedure Receive(Sender: TObject; Socket: TCustomWinSocket); End; Var MyApp: TMyApp; Server: TServerSocket; Procedure TMyApp.Connect(Sender: TObject; Socket: TCustomWinSocket); Begin WriteLn('Connected.') End; Procedure TMyApp.Disconnect(Sender: TObject; Socket: TCustomWinSocket); Begin WriteLn('Disconnected.') End; Procedure TMyApp.Receive(Sender: TObject; Socket: TCustomWinSocket); Begin WriteLn(Socket.ReceiveText) End; Begin MyApp := TMyApp.Create; Server := TServerSocket.Create(nil); Server.OnClientConnect := MyApp.Connect; Server.OnClientDisconnect := MyApp.Disconnect; Server.OnClientRead := MyApp.Receive; Server.Port := 6000; Server.Active := True; While True Do ReadLn; End. |
Deine Anwendung ist durch das "ReadLn" blockiert. Dadurch können eingehende Connects gar nicht beantwortet werden. Die Lösung ist als solche komplett unbrauchbar.
...:cat:... |
danke für die schnelle antwort. jetzt weiß ich zwar warum die komponente nicht auf connects usw reagiert, problem ist nur, wie ändere ich das? ich möchte sowohl auf socket-events eingehen, als auch auf benutzereingaben (readln) reagieren können. und das ganze möglichst ohne application.processmessages.
|
Na ja, bei Console-Apps gibt es auch keine Application. Ich empfehle Dir entweder Dich mal mit Threads zu beschäftigen, oder aber mit nonVCL. Zu beidem findest Du gute Tuts bei Luckie.
![]() ...:cat:... |
mit threads komme ich gut zurecht. das problem ist, dass der server mal eben 1000, 2000 oder mehr verbindungen später halten muss. und für jede einzelne verbindung einen thread aufzumachen ist doch sehr unschön
|
Also ich weiß nicht ob du das machen würdest, aber du könntest auf die
![]()
Code:
vieleicht hilfts ja.
while true do WSocket1.processmessages;
|
ich glaube die ICS ist genau das was ich gesucht habe. vielen dank!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 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