Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Text von Server zum Client senden nur on Connect (https://www.delphipraxis.net/29098-text-von-server-zum-client-senden-nur-connect.html)

blah 3. Sep 2004 21:50


Text von Server zum Client senden nur on Connect
 
Hi zusammen,

ich steh da vor einem kleinen Problem, ich habe vor ein paar Tagen mit Delphi angefangen und möchte jetzt folgendes machen. Ich möchte wenn ein Client eine Telnet Verbindung zu meinem "Server" aufnimmt dass diesem einen Text gesendet wird und die Verbindung gleich dannach getrennt wird und am besten ein weiterer connect sagen wir mal für 300sec gesperrt (sich tot stellt) ist wäre luxus.

Ich habe bisher dies geschafft:
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  ServerSocket1.Socket.SendText('Hallo Dies ist ein test.');
  ServerSocket1.Socket.Close;
end;
ich gebe zu etwas lächerlich jedoch steht jeder mal am anfang und stellt für fortgeschrittene 'dumme' Fragen.

Ich wäre echt froh wenn jemand mir ein funktionierendes Beispiel zusenden/pasten könnte, klingt faul? Ist es aber nicht ich lerne am besten und schnellsten indem ich Code Samples studiere, syntax einpräge und rumprobiere.

ps: die suchen funktion brachte mir nicht viel leider.

--
Gruss blah

Aenogym 3. Sep 2004 22:04

Re: Text von Server zum Client senden nur on Connect
 
hi und herzlich willkommen in der DP ;)!

du kannst ja einen TTimer aufdein formular setzen und den intervall auf 300000 setzen (=300 sek.).
dann musst du irgendwo eine variable deklarieren, die entscheidet, ob der server sich tot stellt, oder nicht. im OnTimer-Event des Timers setzt du die variable dann auf false.
nun, im OnClientConnect-Event des TSocketServers schreibst du:

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  if dead := true then
    socket.close;
end;
damit wird eine gerade geöffnete verbindung sofort geschlossen, wenn dead = true.

alternativ könntest du auch einfach die eigenschaft active des SocketServers auf false setzen und der timer setzt diese iegenschaft nach 300 sek wieder auf true :thumb:

edit: entferne in deinem obigen code das serversocket1. vor den statements, damit die socket-variable des events angesprochen wird (sprich: genau die verbindung, die das event auslöst) ;)

Aenogym

blah 3. Sep 2004 22:54

Re: Text von Server zum Client senden nur on Connect
 
Zitat:

Zitat von Aenogym
hi und herzlich willkommen in der DP ;)!

Danke :-)
auch danke für die schnelle antwort.

Zitat:

Zitat von Aenogym
du kannst ja einen TTimer aufdein formular setzen und den intervall auf 300000 setzen (=300 sek.).
dann musst du irgendwo eine variable deklarieren, die entscheidet, ob der server sich tot stellt, oder nicht. im OnTimer-Event des Timers setzt du die variable dann auf false.
nun, im OnClientConnect-Event des TSocketServers schreibst du:

Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  if dead := true then
    socket.close;
end;
damit wird eine gerade geöffnete verbindung sofort geschlossen, wenn dead = true.

alternativ könntest du auch einfach die eigenschaft active des SocketServers auf false setzen und der timer setzt diese iegenschaft nach 300 sek wieder auf true :thumb:

beide Idee'n sind gut jedoch gefallen mir beide nicht. Das beste wäre wenn er nur für den eine in dieser zeitspanne totermann spielen würde ala:
Delphi-Quellcode:
ServerSocket1.Active := False;
jedoch *nur* für diese eine IP z.B.

Zitat:

Zitat von Aenogym
edit: entferne in deinem obigen code das serversocket1. vor den statements, damit die socket-variable des events angesprochen wird (sprich: genau die verbindung, die das event auslöst) ;)

Danke dies war die Lösung.

Kleine frage wofür steht dieses 'T' meist davor z.B. TTimer?

--
Gruss blah

fiasko 3. Sep 2004 23:21

Re: Text von Server zum Client senden nur on Connect
 
Zitat:

Zitat von blah
zeitspanne totermann spielen würde ala:
Delphi-Quellcode:
ServerSocket1.Active := False;
jedoch *nur* für diese eine IP z.B.

Du meinst für die Remote IP? Das geht nicht, dafür ist der TCP-Stack nicht ausgelegt - grundsätzlich werden alle Remote-IPs gleich behandelt.

Zitat:

Zitat von blah
Kleine frage wofür steht dieses 'T' meist davor z.B. TTimer?

Es ist ein Name - also erstmal reine Willkür ;-) - aber ich würde es mal auf Typ tippen...

Aenogym 4. Sep 2004 11:24

Re: Text von Server zum Client senden nur on Connect
 
Zitat:

Zitat von fiasko
Das geht nicht, dafür ist der TCP-Stack nicht ausgelegt - grundsätzlich werden alle Remote-IPs gleich behandelt.

Genau. Man könnte aber jede remote-IP irgendwo abspeichern und bei jedem connect prüfen, ob die "tot-stell-zeit" für diese IP noch nicht abgelaufen ist.

Zitat:

Zitat von fiasko
Es ist ein Name - also erstmal reine Willkür ;-) - aber ich würde es mal auf Typ tippen...

exakt. man könnte den auch "blahTimer" nennen. allerdings hat es sich durchgesetzt, dem namen des typ immer ein großes T voranzustellen. somit kann man schnell erkennen, ob der typ oder eine instanz des typs angesprochen wird, da der name einer instanz normalerweise ohne das große T anfangt.

Aenogym

blah 4. Sep 2004 12:52

[OT] Das mysteriöse T (was: [weggesnipt aus platz gründen])
 
Zitat:

Zitat von Aenogym
Zitat:

Zitat von fiasko
Das geht nicht, dafür ist der TCP-Stack nicht ausgelegt - grundsätzlich werden alle Remote-IPs gleich behandelt.

Genau. Man könnte aber jede remote-IP irgendwo abspeichern und bei jedem connect prüfen, ob die "tot-stell-zeit" für diese IP noch nicht abgelaufen ist.

schade, denn da gäbe es in jedemfall immernoch ein disconnect und nicht ein "gar nicht erst connecten lassen"...

Zitat:

Zitat von Aenogym
Zitat:

Zitat von fiasko
Es ist ein Name - also erstmal reine Willkür ;-) - aber ich würde es mal auf Typ tippen...

exakt. man könnte den auch "blahTimer" nennen. allerdings hat es sich durchgesetzt, dem namen des typ immer ein großes T voranzustellen. somit kann man schnell erkennen, ob der typ oder eine instanz des typs angesprochen wird, da der name einer instanz normalerweise ohne das große T anfangt.

Danke, euch beiden.
Ich versuche es zusammen zufassen bitte korrigiert mich wenn ich flasch liege:
Also man nennt einen Typ eigentlich nur zum besseren erkennen TTimer und wird mit diesem gestartet aber angesprochen im 'Programm' wird er nur noch mit Timer (Timer ist nur ein stellvertretendes Beispiel).

ps: dies würde heissen ich bin auf der suche nach einem Typ und nicht nach einem addon für SmartCard (TSmartCard)

TIA


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