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