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")
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é.
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()
-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
[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