Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TServerSocket will nicht :( (https://www.delphipraxis.net/5499-tserversocket-will-nicht.html)

uefsilencer 9. Jun 2003 12:44


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.

sakura 9. Jun 2003 12:48

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:...

uefsilencer 9. Jun 2003 13:05

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.

sakura 9. Jun 2003 16:14

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.

www.luckie-online.de

...:cat:...

uefsilencer 9. Jun 2003 16:58

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

magicshadow 9. Jun 2003 20:15

Also ich weiß nicht ob du das machen würdest, aber du könntest auf die ICS ausweichen (die WSocket componente unterstützt die methode processmessages, welche die Steuerung an das System abgibt und deine Anwendung also für Events frei macht.

Code:
while true do WSocket1.processmessages;
vieleicht hilfts ja.

uefsilencer 9. Jun 2003 22:39

ich glaube die ICS ist genau das was ich gesucht habe. vielen dank!


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