Heim >Backend-Entwicklung >Python-Tutorial >Einführung in die Python-Socket-Programmierung

Einführung in die Python-Socket-Programmierung

高洛峰
高洛峰Original
2016-10-18 11:14:351069Durchsuche

Schritte zum Schreiben eines Servers in Python:

1. Der erste Schritt besteht darin, ein Socket-Objekt zu erstellen. Rufen Sie den Socket-Konstruktor auf. Zum Beispiel:

socket = socket.socket( Familie, Typ)

Der Familienparameter stellt die Adressfamilie dar, die AF_INET oder AF_UNIX sein kann. Die AF_INET-Familie umfasst Internetadressen und die AF_UNIX-Familie wird für die Kommunikation zwischen Prozessen auf demselben Computer verwendet.

Der Typparameter stellt den Socket-Typ dar, der SOCK_STREAM (Stream-Socket) und SOCK_DGRAM (Datagramm-Socket) sein kann.

2. Der zweite Schritt besteht darin, den Socket an die angegebene Adresse zu binden. Dies wird durch die Bindungsmethode des Socket-Objekts erreicht:

socket.bind(address)

Für den von AF_INET erstellten Socket muss die Adressadresse ein Tupel mit zwei Elementen sein, formatieren Sie es ist (Host,Port). host steht für den Host und port für die Portnummer. Wenn die Portnummer verwendet wird, der Hostname falsch ist oder der Port reserviert wurde, löst die Bindungsmethode eine socket.error-Ausnahme aus.

3. Der dritte Schritt besteht darin, die Listen-Methode des Socket-Sockets zu verwenden, um die Verbindungsanforderung zu empfangen.

socket.listen( backlog )

backlog gibt die maximale Anzahl von Clients an, die eine Verbindung zum Server herstellen dürfen. Sein Wert beträgt mindestens 1. Nach dem Empfang von Verbindungsanfragen müssen diese Anfragen in die Warteschlange gestellt werden. Wenn die Warteschlange voll ist, wird die Anfrage abgelehnt.

4. Der vierte Schritt besteht darin, dass der Server-Socket darauf wartet, dass der Client über die Accept-Methode des Sockets eine Verbindung anfordert.

Verbindung, Adresse = socket.accept()

Wenn die Accept-Methode aufgerufen wird, wechselt der Socket in den Status „Warten“. Wenn der Client eine Verbindung anfordert, stellt die Methode die Verbindung her und kehrt zum Server zurück. Die Methode „accept“ gibt ein Tupel zurück, das zwei Elemente (Verbindung, Adresse) enthält. Das erste Element, Verbindung, ist das neue Socket-Objekt, über das der Server mit dem Client kommunizieren muss; das zweite Element, Adresse, ist die Internetadresse des Clients.

5. Der fünfte Schritt ist die Verarbeitungsphase. Der Server und der Client kommunizieren (übertragen) über die Sende- und Empfangsmethoden. Der Server ruft send auf und sendet Informationen in Form einer Zeichenfolge an den Client. Die send-Methode gibt die Anzahl der gesendeten Zeichen zurück. Der Server empfängt Informationen vom Client mithilfe der Recv-Methode. Beim Aufruf von recv muss der Server eine Ganzzahl angeben, die der maximalen Datenmenge entspricht, die mit diesem Methodenaufruf empfangen werden kann. Die Recv-Methode wechselt beim Empfang von Daten in den Status „Blockiert“ und gibt schließlich eine Zeichenfolge zurück, die die empfangenen Daten darstellt. Wenn die Menge der gesendeten Daten die von recv zulässige Menge übersteigt, werden die Daten gekürzt. Überschüssige Daten werden auf der Empfangsseite zwischengespeichert. Bei nachfolgenden Aufrufen von recv werden überschüssige Daten aus dem Puffer entfernt (zusammen mit allen anderen Daten, die der Client möglicherweise seit dem letzten Aufruf von recv gesendet hat).

6. Wenn die Übertragung abgeschlossen ist, ruft der Server die Close-Methode des Sockets auf, um die Verbindung zu schließen.

Schritte zum Schreiben des Clients in Python:

1. Erstellen Sie einen Socket, um eine Verbindung zum Server herzustellen: socket = socket.socket(family, type)

2 Verbindungsmethode des Sockets. Verbindung zum Server herstellen. Für die AF_INET-Familie lautet das Verbindungsformat wie folgt:

socket.connect( (host,port) )

host steht für den Hostnamen oder die IP des Servers und port für die gebundene Portnummer an den Serverprozess. Wenn die Verbindung erfolgreich ist, kann der Client über den Socket mit dem Server kommunizieren. Wenn die Verbindung fehlschlägt, wird eine socket.error-Ausnahme ausgelöst.

3. In der Verarbeitungsphase kommunizieren Client und Server über die Sendemethode und die Empfangsmethode.

4. Wenn die Übertragung abgeschlossen ist, schließt der Client die Verbindung, indem er die Close-Methode des Sockets aufruft.

Hier ist ein einfaches Beispiel:

server.py

if __name__ == '__main__':
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.bind(('localhost', 8001))
    sock.listen(5)
    while True:
        connection,address = sock.accept()
        try:
            connection.settimeout(5)
            buf = connection.recv(1024)
            if buf == '1':
                connection.send('welcome to server!')
            else:
                connection.send('please go out!')
        except socket.timeout:
            print 'time out'
        connection.close()

client.py

if __name__ == '__main__':
    import socket
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(('localhost', 8001))
    import time
    time.sleep(2)
    sock.send('1')
    print sock.recv(1024)
    sock.close()

Führen Sie server.py im Terminal aus, Führen Sie dann clien.py aus. Auf dem Terminal wird „Willkommen beim Server!“ angezeigt. Wenn Sie sock.send('1') in client.py auf einen anderen Wert ändern, wird auf dem Terminal „Please go out!“ angezeigt. Wenn Sie time.sleep(2) auf einen Wert größer als 5 ändern, wird der Server angezeigt wird eine Zeitüberschreitung haben.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn