[PYTHON] Die Geschichte des Versuchs, den Client wieder zu verbinden

Zufällig musste ich zwischen dem Server und dem Client kommunizieren. Selbst wenn die Kommunikation fehlschlägt, möchte der Client daher weiterhin versuchen, erneut eine Verbindung herzustellen, ohne die Ausführung zu beenden! Ich dachte, aber ich stolperte dort ...

Ich dachte, ich sollte den Socket neu erstellen, also habe ich ihn wieder einer vorhandenen Variablen zugewiesen! Ich konnte es nicht tun ...

Das Programm, das ich als Referenz verwendet habe [Auszug aus 2]

import socket

host = "xxx.xxx.xxx.xxx"
port = xxxx

client = socket.socket(socket.AF_INET, 
socket.SOCK_STREAM) #Unten Sockel.Nennen Sie es Socket

client.connect((host, port)) #Unten Sockel.Rufen Sie connect an
client.send("from nadechin")

Problem

Eigentlich denke ich, dass es oft während gedreht wird, aber wenn der Server ausfällt, kann das Folgende nicht getan werden.

client = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
client.connect((host, port))
client.send("from nadechin")

=====Server geht hier runter=====
client = socket.socket(socket.AF_INET,
socket.SOCK_STREAM)
client.connect((host, port))
client.send("from nadechin")

Hier hat es nicht funktioniert, wenn ich socket.socket verloren oder andere Socket-Methoden wie Schließen, Herunterfahren, Timeout verwendet habe.

Lösung(?)

Sobald ich den Client fallen ließ, funktionierte es natürlich. Also dachte ich, es wäre gut, wenn der bereits erstellte Socket zerstört würde, also habe ich diese Maßnahme ergriffen, indem ich die folgende Klasse erstellt habe. (Der Einfachheit halber wird die Fehlerbehandlung weggelassen - versuchen Sie es :)

class client(object):
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #try:
        self.client.connect((self.host, self.port))

    def send(self):
        #try:
        self.client.send("ok")

    def execute(self):
        while 1:
            self.__init__(self.host, self.port)
            self.send()

client(host, port).execute()

Als ich es wie oben geschrieben habe, hat es funktioniert.

Es war seltsam, dass das Folgende nicht funktionierte. Warum···

class client(object):
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        #try:
        self.client.connect((self.host, self.port))

    def send(self):
        #try:
        self.client.send("ok")

while 1:
    client(host, port).execute()

Andere Stolpersteine

-Wenn ich Python ausgeführt habe, habe ich es nur zu einem lokalen Netzwerk gemacht Da es eingestellt wurde, muss ich die Firewall-Einstellungen überprüfen

Die Seite, auf die ich beim Erstellen des Servers / Clients verwiesen habe:

[1] Multithread-Server http://stackoverflow.com/questions/23828264/how-to-make-a-simple-multithreaded-socket-server-in-python-that-remembers-client [2] Kunde http://qiita.com/nadechin/items/28fc8970d93dbf16e81b [3] Fehler https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx

Es war sehr hilfreich. Vielen Dank. Ich habe nach Fehler-Gegenmaßnahmen mit Stapelüberlauf gesucht, aber es gab keine sehr gute. Zur Zeit mache ich Fehler 10053, 10054 (auch 10056, 10057) mit der oben beschriebenen Methode. Andere Fehler setzen socket.connect mit continue fort.

Klicken Sie hier für die Implementierung? (Vielleicht gibt es) https://github.com/jackee777/server_and_client/tree/master/simple_server

Recommended Posts

Die Geschichte des Versuchs, den Client wieder zu verbinden
Die Geschichte, MeCab in Ubuntu 16.04 zu setzen
Die Geschichte, deep3d auszuprobieren und zu verlieren
Die Geschichte von pep8 wechselt zu pycodestyle
Die Geschichte von sys.path.append ()
Die Geschichte des Versuchs, Tensorboard mit Pytorch zu verwenden
Die Geschichte, Sourcetrail × macOS × VS Code auszuprobieren
Die Geschichte vom Umzug von Pipenv zur Poesie
Die Geschichte des Versuchs, SSH_AUTH_SOCK mit LD_PRELOAD auf dem Bildschirm veraltet zu halten
Die Geschichte des Baus von Zabbix 4.4
Die Geschichte, ein Ring-Fit-Abenteuer kaufen zu wollen
Die Geschichte der Verwendung von Circleci zum Bau vieler Linux-Räder
Die Geschichte eines hochrangigen Technikers, der versucht, das Überleben der Titanic vorherzusagen
Ich kann die Uhrenquelle tsc nicht finden! ?? Die Geschichte des Versuchs, einen Kernel-Patch zu schreiben
Eine Geschichte über den Versuch, mit der kostenlosen Stufe von AWS zur COVID-19-Analyse beizutragen, und das Scheitern
Eine Geschichte über den Versuch, Linter mitten in einem Python (Flask) -Projekt vorzustellen
Die Geschichte der Einführung von Jedi (automatisches Vervollständigungspaket von Python) in Emacs
Die Geschichte des Kopierens von Daten von S3 auf Googles TeamDrive
Technologie, die Jupiter unterstützt: Traitlets (Geschichte des Entschlüsselungsversuchs)
Immerhin die Geschichte der Rückkehr von Linux zu Windows
Die Geschichte von Python und die Geschichte von NaN
Die Geschichte der Teilnahme an AtCoder
Die Geschichte des "Lochs" in der Akte
Die Geschichte des erneuten Bereitstellens des Anwendungsservers
Ergänzung zur Erklärung von vscode
Die Geschichte des Exportierens eines Programms
[Pythonista] Die Geschichte einer Aktion zum Kopieren ausgewählten Textes
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte
Eine Geschichte, in der der Algorithmus zu einem lächerlichen Ergebnis kam, als er versuchte, das Problem der reisenden Verkäufer richtig zu lösen
Die Geschichte eines Fehlers in PyOCR
Skript zum Ändern der Beschreibung von Fasta
10 Methoden zur Verbesserung der Genauigkeit von BERT
So überprüfen Sie die Version von Django
Die Geschichte einer unveränderlichen Form
Die Geschichte der Manipulation globaler Python-Variablen
Dekodierung von Keras 'LSTM model.predict
Die Geschichte der Verarbeitung A von Blackjack (Python)
zoom Ich habe versucht, den Grad der Aufregung der Geschichte auf der Konferenz zu quantifizieren
Wenn Sie den HTTP-Header des Testclients von Flask ändern möchten
Eine Geschichte über einen Anfänger im Deep Learning, der versucht, Gitarren mit CNN zu klassifizieren
Ich habe versucht, die Phase der Geschichte mit COTOHA zu extrahieren und zu veranschaulichen
Ich habe die übliche Geschichte ausprobiert, Deep Learning zu verwenden, um den Nikkei-Durchschnitt vorherzusagen
Eine Geschichte über den Versuch, den Testprozess eines 20 Jahre alten Systems in C zu verbessern
So berechnen Sie die Volatilität einer Marke
Die Geschichte des tiefen Lernens mit TPU
So finden Sie den Bereich des Boronoi-Diagramms
Die Geschichte, dass die Lernkosten von Python niedrig sind
Die Hand von "Millijan" durch Kombinationsoptimierung finden
Die Geschichte der IPv6-Adresse, die ich auf ein Minimum beschränken möchte
Einstellung zur Ausgabe des Protokolls zur Ausführung von cron
Die Ungenauigkeit von Tensorflow war auf log (0) zurückzuführen.
Die Geschichte der Herstellung des Mel Icon Generator Version 2
Twitter-Streaming-Client zum Genießen im Terminal