[PYTHON] L'histoire d'essayer de reconnecter le client

Par chance, j'ai dû communiquer entre le serveur et le client. Par conséquent, même si la communication échoue, le client souhaite continuer à essayer de se connecter à nouveau sans terminer l'exécution! J'ai pensé, mais je suis tombé là-bas ...

J'ai pensé que je devais recréer le socket, alors je l'ai attribué à nouveau à une variable existante! Je ne pouvais pas le faire ...

Le programme que j'ai utilisé comme référence [extrait de 2]

import socket

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

client = socket.socket(socket.AF_INET, 
socket.SOCK_STREAM) #Ci-dessous, prise.Appelez ça socket

client.connect((host, port)) #Ci-dessous, prise.Appeler connecter
client.send("from nadechin")

problème

En fait, je pense qu'il est souvent tourné pendant, mais lorsque le serveur tombe en panne, ce qui suit ne peut pas être fait.

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

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

Ici, si j'ai perdu socket.socket ou utilisé d'autres méthodes de socket telles que la fermeture, l'arrêt, le délai d'expiration, cela n'a pas fonctionné.

Solution(?)

De toute évidence, une fois que j'ai laissé tomber le client, cela a fonctionné. Donc, j'ai pensé que ce serait bien si le socket déjà créé était détruit, j'ai donc pris cette mesure en créant la classe suivante. (Pour plus de simplicité, la gestion des erreurs est omise - essayez :)

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()

Quand je l'ai écrit comme ci-dessus, cela a fonctionné.

Il était étrange que ce qui suit ne fonctionne pas. Pourquoi···

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()

Autres pierres d'achoppement

-Quand j'ai exécuté python, je viens d'en faire un réseau local Depuis qu'il a été défini, je dois revoir les paramètres du pare-feu

La page à laquelle j'ai fait référence lors de la création du serveur / client:

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

Cela a été très utile. Merci beaucoup. J'ai recherché des contre-mesures d'erreur avec un débordement de pile, mais il n'y en avait pas une très bonne. Pour le moment, je fais l'erreur 10053, 10054 (également 10056, 10057) par la méthode décrite ci-dessus. D'autres erreurs continuent socket.connect avec continue.

Cliquez ici pour la mise en œuvre? (Peut-être qu'il y en a) https://github.com/jackee777/server_and_client/tree/master/simple_server

Recommended Posts

L'histoire d'essayer de reconnecter le client
L'histoire de la mise en place de MeCab dans Ubuntu 16.04
L'histoire d'essayer deep3d et de perdre
L'histoire du changement de pep8 en pycodestyle
L'histoire de sys.path.append ()
Histoire d'essayer d'utiliser Tensorboard avec Pytorch
L'histoire d'essayer Sourcetrail × macOS × VS Code
Histoire de passer de Pipenv à la poésie
L'histoire de la tentative de pousser SSH_AUTH_SOCK obsolète avec LD_PRELOAD à l'écran
L'histoire de la construction de Zabbix 4.4
L'histoire de vouloir acheter une aventure en forme de bague
L'histoire de l'utilisation de Circleci pour construire des roues Manylinux
L'histoire d'un technicien de haut niveau essayant de prédire la survie du Titanic
Je ne trouve pas l'horloge tsc! ?? L'histoire d'essayer d'écrire un patch de noyau
Une histoire sur la tentative de contribuer à l'analyse COVID-19 avec l'offre gratuite d'AWS et l'échec
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)
L'histoire de l'introduction de Jedi (package de complétion automatique de python) dans emacs
L'histoire de la copie de données de S3 vers TeamDrive de Google
Technologie qui prend en charge Jupyter: Tralets (histoire d'essayer de déchiffrer)
Après tout, l'histoire du retour de Linux à Windows
L'histoire de Python et l'histoire de NaN
L'histoire de la participation à AtCoder
L'histoire du "trou" dans le fichier
L'histoire du remontage du serveur d'application
Supplément à l'explication de vscode
L'histoire de l'exportation d'un programme
[Pythonista] L'histoire de la réalisation d'une action pour copier le texte sélectionné
L'histoire de l'échec de la mise à jour de "calendar.day_abbr" sur l'écran d'administration de django
Une histoire dans laquelle l'algorithme est arrivé à une conclusion ridicule en essayant de résoudre correctement le problème du voyageur de commerce
L'histoire d'une erreur dans PyOCR
Script pour changer la description de fasta
10 méthodes pour améliorer la précision de BERT
Comment vérifier la version de Django
L'histoire de la fabrication d'un moule immuable
L'histoire de la manipulation des variables globales Python
Décodage du modèle LSTM de Keras.
L'histoire du traitement A du blackjack (python)
zoom J'ai essayé de quantifier le degré d'excitation de l'histoire lors de la conférence
Lorsque vous souhaitez modifier l'en-tête HTTP du client de test de Flask
L'histoire d'un débutant en apprentissage profond essayant de classer les guitares avec CNN
J'ai essayé d'extraire et d'illustrer l'étape de l'histoire à l'aide de COTOHA
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
Une histoire d'essayer d'améliorer le processus de test d'un système vieux de 20 ans écrit en C
Comment calculer la volatilité d'une marque
L'histoire de l'apprentissage profond avec TPU
Comment trouver la zone du diagramme de Boronoi
L'histoire selon laquelle le coût d'apprentissage de Python est faible
Trouver la main de "Millijan" par l'optimisation des combinaisons
L'histoire de l'adresse IPv6 que je souhaite conserver au minimum
Paramètre pour afficher le journal de l'exécution de cron
L'inexactitude de Tensorflow était due à log (0)
L'histoire de la création du Mel Icon Generator version 2
Client de streaming Twitter à apprécier dans le terminal