Python sockets, wie mit der client unerwartet geschlossen wird

Meine python socket server überwacht und dann eine Verbindung zu einem client, dann senden Sie eine unbestimmte Anzahl von strings von einem Benutzer. Der client kann dann schließen, oder verliert die Verbindung zum server.

Dies verursacht einen Fehler.

[Errno 10053] Eine bestehende Verbindung wurde abgebrochen, indem die software in Ihre host-Maschine.
oder
[Errno 10054] Eine vorhandene Verbindung wurde zwangsweise geschlossen durch remote-host -

Wie umgehe ich dieses event so, dass ich die Verbindung schließen und neu starten, mein server empfangsbereit für eine Verbindung?

Python-Server-Beispiel:

# Echo server program
import socket
import sys

HOST = None               # Symbolic name meaning all available interfaces
PORT = 7001              # Arbitrary non-privileged port
s = None

def startListening():
    print "starting to listen"

    for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,
                                  socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
        af, socktype, proto, canonname, sa = res
        try:
            s = socket.socket(af, socktype, proto)
        except socket.error as msg:
            s = None
            continue
        try:
            s.bind(sa)
            s.listen(1)
        except socket.error as msg:
            s.close()
            s = None
            continue
        break
    if s is None:
        print 'could not open socket'
        sys.exit(1)
    conn, addr = s.accept()
    print 'Connected by', addr
    while 1:
        data = conn.recv(1024)
        if not data: 
            break
        print data
        message = ""
        while not "quit" in message:
            message = raw_input('Say Something : ')
            conn.sendall(message)
        #conn.send("I got that, over!")

    conn.close()
    print "connection closed"

while 1:
    startListening()

python-client Beispiel:

# Echo client program
import socket
import sys

HOST = 'localhost'    # The remote host
PORT = 7001              # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
    af, socktype, proto, canonname, sa = res
    try:
        s = socket.socket(af, socktype, proto)
    except socket.error as msg:
        s = None
        continue
    try:
        s.connect(sa)
    except socket.error as msg:
        s.close()
        s = None
        continue
    break
if s is None:
    print 'could not open socket'
    sys.exit(1)
s.sendall("Please send me some strings")
data = ""
while ("quit" not in data):
    data = s.recv(1024)
    print 'Received', repr(data)
s.close()

Diesen Fehler zu reproduzieren, führen Sie den server in einem Eingabeaufforderungsfenster, und der client in einem zweiten, dann schließen Sie das client-Fenster.

InformationsquelleAutor Zac | 2013-06-04
Schreibe einen Kommentar