AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi automatisches verbinden eines konsolen-winsockclients
Thema durchsuchen
Ansicht
Themen-Optionen

automatisches verbinden eines konsolen-winsockclients

Ein Thema von ToXiC · begonnen am 20. Apr 2009 · letzter Beitrag vom 23. Apr 2009
Antwort Antwort
ToXiC

Registriert seit: 28. Okt 2007
52 Beiträge
 
Delphi 2005 Personal
 
#1

automatisches verbinden eines konsolen-winsockclients

  Alt 20. Apr 2009, 17:46
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:
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.
im übrigen wartet der server nur mit serversocket.open.

irgentwelche vorschläge?
danke
Chris
  Mit Zitat antworten Zitat
blackdrake

Registriert seit: 22. Aug 2003
Ort: Bammental
618 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: automatisches verbinden eines konsolen-winsockclients

  Alt 23. Apr 2009, 02:25
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 von ToXiC:
Delphi-Quellcode:
 ThreadHandle:=CreateThread(nil, 0, TFNThreadStartRoutine(@ConThread),
  nil, 0, ThreadID);
 If ThreadHandle <> 0 Then CloseHandle(ThreadHandle);
Den Abschnitt verstehe ich nicht ganz. Welchen Thread erzeugst du da?

Zitat von ToXiC:
im übrigen wartet der server nur mit serversocket.open.
Wenn du mit "server" deine (Server/Daemon)-Anwendung meinst, dann bräuchtest du doch nicht mal Threads, oder? Es ist unbedenklich, bei einer Daemon-Applikation eine Endlosschleife im Haupt-Thread zu haben, da der Dienst ja eh nichts anderes macht, außer warten und keine grafischen Bedientelemente enthält, die "hängen" können.

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?)
Daniel Marschall
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: automatisches verbinden eines konsolen-winsockclients

  Alt 23. Apr 2009, 06:39
Zitat:
(Sollte dieser Thread nicht ins Unterforum für Netzwerkprogrammierung?)
Ja
Markus Kinzler
  Mit Zitat antworten Zitat
23. Apr 2009, 06:39
Dieses Thema wurde von "mkinzler" von "Object-Pascal / Delphi-Language" nach "Internet / LAN / ASP.NET" verschoben.
Passt besser hier rein
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:44 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