Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Prüfen ob ein Socket verbunden ist? (https://www.delphipraxis.net/65667-pruefen-ob-ein-socket-verbunden-ist.html)

Pseudemys Nelsoni 19. Mär 2006 18:40


Prüfen ob ein Socket verbunden ist?
 
Moin,

also es geht erstmal um folgendes: Ich möchte einen Bot schreiben, der wenn er vom Server getrennt wird, immer wieder versucht neu zu verbinden - unendlich, bis es eben klappt. In meiner endlosen while Schleife muss ich ja irgendwie prüfen, ob der Socket bereits verbunden ist oder nicht, Microsoft meinte dazu:

Zitat:

Weil die Connected-Eigenschaft nur den Zustand der Verbindung während des letzten Vorgangs wiedergibt, sollten Sie versuchen, eine Meldung zu senden oder zu empfangen, um den aktuellen Zustand zu bestimmen. Nachdem das Senden der Meldung fehlgeschlagen ist, gibt diese Eigenschaft nicht mehr true zurück.
Beachten Sie, dass dieses Verhalten vorgesehen ist. Sie können den Zustand der Verbindung nicht zuverlässig überprüfen, da die Verbindung in der Zeit zwischen der Überprüfung und dem Senden/Empfangen getrennt werden kann. Der Code sollte von einer vorhandenen Verbindung des Sockets ausgehen und fehlgeschlagene Übertragungen ordnungsgemäß behandeln.
Ich habe es nun so versucht:

Code:
byte[] jo = new byte[0];
tcpClient.Client.Receive(jo);
if (!tcpClient.Connected)
{
    tcpClient.Connect("irc.ham.de.euirc.net", 6667);
}
Wenn der Server mich(den Bot) nun disconnectet, connectet er nicht neu, weil "Connected" immer true ist irgendwie...

Hat jemand ne Idee? Ist mein Code falsch?

marabu 19. Mär 2006 19:26

Re: Prüfen ob ein Socket verbunden ist?
 
Hallo Mario,

wäre es nicht geschickter anstatt Receive() ab und zu ein IRC PING an den Server zu schicken um den Verbindungszustand zu überprüfen? Zumindest interpretiere ich den Microsoft-Text so.

Grüße vom marabu

Pseudemys Nelsoni 19. Mär 2006 19:38

Re: Prüfen ob ein Socket verbunden ist?
 
Moin marabu,

das würde zu lange dauern, ich muss sofort wissen, wann der Server die Verbindung getrennt hat, deswegen benutz ich immer "Receive" und lese 0 Bytes.... Nach Microsoft sollte nach Aufruf einer solchen Methode, "Connected" den "wahren" Wert haben... hat es aber nicht :(, da immernoch "True" nachdem die Verbindung vom Server beenden worden ist.

marabu 19. Mär 2006 20:08

Re: Prüfen ob ein Socket verbunden ist?
 
Ich vermute, dass zum Empfangen von 0 Bytes der Server nicht kontaktiert wird - beim Senden eines PING aber schon.

marabu

Pseudemys Nelsoni 19. Mär 2006 20:41

Re: Prüfen ob ein Socket verbunden ist?
 
Moin marabu,

würde ich aber in einer whileschleife was an den server senden, würde ich ihn ja regelrecht zuflooden. hmpfff

marabu 19. Mär 2006 21:47

Re: Prüfen ob ein Socket verbunden ist?
 
Zitat:

Zitat von marabu
ab und zu ein IRC PING



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