Python Socket Programmierung – Server, Client Beispiel

Guten Tag, Lernende! In unserem vorherigen Tutorial haben wir das Modul Python unittest besprochen. Heute werden wir ein Beispiel für Python-Socket-Programmierung betrachten. Wir werden Python-Socket-Server- und Client-Anwendungen erstellen.

Python-Socket-Programmierung

Um die Python-Socket-Programmierung zu verstehen, müssen wir über drei interessante Themen Bescheid wissen – Socket-Server, Socket-Client und Socket. Also, was ist ein Server? Nun, ein Server ist eine Software, die auf Client-Anfragen wartet und sie entsprechend bedient oder verarbeitet. Auf der anderen Seite ist ein Client der Anforderer dieses Dienstes. Ein Clientprogramm fordert Ressourcen beim Server an und der Server antwortet auf diese Anfrage. Ein Socket ist der Endpunkt eines bidirektionalen Kommunikationskanals zwischen Server und Client. Sockets können innerhalb eines Prozesses, zwischen Prozessen auf derselben Maschine oder zwischen Prozessen auf verschiedenen Maschinen kommunizieren. Für jede Kommunikation mit einem Remote-Programm müssen wir uns über einen Socket-Port verbinden. Das Hauptziel dieses Socket-Programmierungs-Tutorials ist es, Ihnen zu zeigen, wie Socket-Server und Client miteinander kommunizieren. Sie werden auch lernen, wie man ein Python-Socket-Server-Programm schreibt.

Python Socket Beispiel

Wir haben bereits gesagt, dass ein Socket-Client Ressourcen beim Socket-Server anfordert und der Server auf diese Anfrage antwortet. Daher werden wir sowohl das Server- als auch das Clientmodell entwerfen, damit jedes mit ihnen kommunizieren kann. Die Schritte können wie folgt betrachtet werden.

  1. Das Python-Socket-Serverprogramm wird zuerst ausgeführt und wartet auf jede Anfrage.
  2. Das Python-Socket-Clientprogramm wird das Gespräch zuerst initiieren.
  3. Dann wird das Serverprogramm entsprechend auf Clientanfragen reagieren.
  4. Das Clientprogramm wird beendet, wenn der Benutzer die Nachricht „bye“ eingibt. Das Serverprogramm wird ebenfalls beendet, wenn das Clientprogramm beendet wird. Dies ist optional, und wir können das Serverprogramm unbegrenzt laufen lassen oder mit einem bestimmten Befehl in der Clientanforderung beenden.

Python Socket Server

Wir werden das Python-Socket-Serverprogramm als socket_server.py speichern. Um eine Python-Socket-Verbindung zu verwenden, müssen wir das Modul socket importieren. Anschließend müssen wir sequenziell einige Aufgaben ausführen, um eine Verbindung zwischen Server und Client herzustellen. Wir können die Hostadresse mit der Funktion socket.gethostname() erhalten. Es wird empfohlen, einen Port über 1024 zu verwenden, da Portnummern kleiner als 1024 für das Standard-Internetprotokoll reserviert sind. Sehen Sie sich den unten stehenden Python-Socket-Server-Beispielcode an, die Kommentare werden Ihnen helfen, den Code zu verstehen.

import socket


def server_program():
    # die Hostname erhalten
    host = socket.gethostname()
    port = 5000  # initiate port no above 1024

    server_socket = socket.socket()  # get instance
    # Achten Sie genau darauf. Die bind() Funktion nimmt ein Tupel als Argument
    server_socket.bind((host, port))  # bind host address and port together

    # Konfigurieren, wie viele Clients der Server gleichzeitig hören kann
    server_socket.listen(2)
    conn, address = server_socket.accept()  # accept new connection
    print("Connection from: " + str(address))
    while True:
        # Datenstrom empfangen. Er akzeptiert keine Datenpakete größer als 1024 Bytes
        data = conn.recv(1024).decode()
        if not data:
            # Wenn keine Daten empfangen werden, abbrechen
            break
        print("from connected user: " + str(data))
        data = input(' -> ')
        conn.send(data.encode())  # send data to the client

    conn.close()  # close the connection


if __name__ == '__main__':
    server_program()

Also unser Python-Socket-Server läuft auf Port 5000 und wird auf Clientanfragen warten. Wenn Sie möchten, dass der Server nicht beendet wird, wenn die Clientverbindung geschlossen ist, entfernen Sie einfach die if-Bedingung und die break-Anweisung. Die Python while-Schleife wird verwendet, um das Serverprogramm unbegrenzt auszuführen und auf Clientanfragen zu warten.

Python Socket Client

Wir werden das Python Socket Client-Programm als socket_client.py speichern. Dieses Programm ähnelt dem Server-Programm, mit Ausnahme der Bindung. Der Hauptunterschied zwischen dem Server- und dem Client-Programm besteht darin, dass im Server-Programm die Hostadresse und die Portadresse zusammengebunden werden müssen. Sehen Sie sich den unten stehenden Beispielcode für das Python Socket Client an. Die Kommentare werden Ihnen helfen, den Code zu verstehen.

import socket


def client_program():
    host = socket.gethostname()  # as both code is running on same pc
    port = 5000  # socket server port number

    client_socket = socket.socket()  # instantiate
    client_socket.connect((host, port))  # connect to the server

    message = input(" -> ")  # take input

    while message.lower().strip() != 'bye':
        client_socket.send(message.encode())  # send message
        data = client_socket.recv(1024).decode()  # receive response

        print('Received from server: ' + data)  # show in terminal

        message = input(" -> ")  # again take input

    client_socket.close()  # close the connection


if __name__ == '__main__':
    client_program()

Python Socket Programmierung Ausgabe

Um die Ausgabe zu sehen, führen Sie zuerst das Socket-Server-Programm aus. Führen Sie dann das Socket-Client-Programm aus. Schreiben Sie dann etwas aus dem Client-Programm. Schreiben Sie anschließend erneut eine Antwort aus dem Server-Programm. Schreiben Sie zuletzt bye aus dem Client-Programm, um beide Programme zu beenden. Das folgende kurze Video zeigt, wie es bei meinem Testlauf der Socket-Server- und Client-Beispielprogramme funktioniert hat.

pankaj$ python3.6 socket_server.py 
Connection from: ('127.0.0.1', 57822)
from connected user: Hi
 -> Hello
from connected user: How are you?
 -> Good
from connected user: Awesome!
 -> Ok then, bye!
pankaj$
pankaj$ python3.6 socket_client.py 
 -> Hi
Received from server: Hello
 -> How are you?
Received from server: Good
 -> Awesome!
Received from server: Ok then, bye!
 -> Bye
pankaj$

Beachten Sie, dass der Socket-Server auf Port 5000 läuft, aber der Client benötigt auch einen Socket-Port, um eine Verbindung zum Server herzustellen. Dieser Port wird zufällig vom Client-Verbindungsaufbau zugewiesen. In diesem Fall ist es 57822. Das ist also alles zur Python Socket-Programmierung, den Python Socket-Server und die Beispielprogramme für den Socket-Client. Referenz: Offizielle Dokumentation

Source:
https://www.digitalocean.com/community/tutorials/python-socket-programming-server-client