automatisches verbinden eines konsolen-winsockclients
hallöchen
ich bastel momentan an einem programm, dass falls der dazugehörige server online ist nachrichten oder ggf updates herunterläd da die beiden programme unabhängig von einander läufen sollen möchte ich in den client einen verbindungstimer einbauen, was in einer konsole bereits die erste hürde darstellte. nachdem ich diesen mit hilfe von dp mit hilfe von threads zum laufen bekam entstand das nächste problem. das schlimmste ist,dass ich es noch nichtmal genau beschreiben kann. am besten schaut ihr es euch einfach mal an. übrigens benutze ich eine litesocket-komponete.
Delphi-Quellcode:
im übrigen wartet der server nur mit serversocket.open.
program Project1;
{$APPTYPE CONSOLE} uses Windows,Sockets; type TConnection = class procedure Read(Sender: TObject; Socket: TCustomWinSocket); procedure Disconnect(Sender: TObject; Socket: TCustomWinSocket); procedure Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); procedure Connect(Sender: TObject; Socket: TCustomWinSocket); end; var Connection: TConnection; ClientSocket: TClientSocket; Msg: TMsg; ThreadID: DWORD; ThreadHandle: THandle; procedure TConnection.Read(Sender: TObject; Socket: TCustomWinSocket); begin WriteLn(Socket.ReceiveText); end; procedure TConnection.Connect(Sender: TObject; Socket: TCustomWinSocket); begin end; procedure TConnection.Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin end; procedure TConnection.Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin end; procedure ConThread(zahl: Pointer)stdcall; begin While Not ClientSocket.Socket.Connected Do begin Sleep(500); Clientsocket.Open; end; end; begin Connection := TConnection.Create; ClientSocket := TClientSocket.Create; ClientSocket.OnRead := Connection.Read; ClientSocket.OnError := Connection.Error; ClientSocket.OnConnect := Connection.Connect; ClientSocket.OnDisconnect := Connection.Disconnect; ClientSocket.Host := 'localhost'; ClientSocket.Port := 123; ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@ConThread), nil, 0, ThreadID); If ThreadHandle <> 0 Then CloseHandle(ThreadHandle); While True Do Begin Sleep(100); If PeekMessage(Msg, 0, 0, 0, PM_REMOVE) Then Begin if Msg.Message <> $0012 then Begin TranslateMessage(Msg); DispatchMessage(Msg); End Else Begin Break; End; End; end; end. irgentwelche vorschläge? danke |
Re: automatisches verbinden eines konsolen-winsockclients
Toll wäre es natürlich, wenn du einen Thread aufmacht, der eine while-true Endlos-Schleife besitzt, die ständig abfrägt, ob der Socket vom Server offen ist, also eine Verbindung hergestellt werden kann und dann die gewünschten Transaktionen durchführt. (Lass aber so 60 Sekunden Zeit zwischen den Abfragen, damit du den Server nicht zuspamst)
Zitat:
Zitat:
Ich wüde also eine serversocket.open oder canconnect etc. direkt in die Schleife, die du derzeit als Nachrichtenschleife verwendest, reinpacken. Gruß blackdrake (Sollte dieser Thread nicht ins Unterforum für Netzwerkprogrammierung?) |
Re: automatisches verbinden eines konsolen-winsockclients
Zitat:
|
DP-Maintenance
Dieses Thema wurde von "mkinzler" von "Object-Pascal / Delphi-Language" nach "Internet / LAN / ASP.NET" verschoben.
Passt besser hier rein |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:17 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