Hier ist das grundlegende Setup -Diagramm, um dieses Programm auszuführen.
Der Einfachheit halber nennen wir System A als A_Client und System B als B_server während des Artikels.
Dateianforderungen:
Wir brauchen Server.py und diese Datei sollte auf dem Serversystem vorhanden sein. In unserem Fallserver.PY sollte am B_SERVER -System sein.
Zwei weitere Dateien Klient.py Und Probe.txt sollte im Client -System vorhanden sein. In unserem Fall sollten diese beiden Dateien am a_client System vorhanden sein.
Annahmen:
Hier sind die Annahmen:
Einschränkungen:
Bevor wir weiter fortfahren, sollten wir wissen, dass es einige Einschränkungen dieses Programms gibt.
Anforderungen einrichten:
Serverquellcode:
https: // github.com/linuxHintcode/WebSamples/Blob/Master/Python_Send_file/Server.py
Client -Quellcode:
https: // github.com/linuxHintcode/WebSamples/Blob/Master/Python_Send_file/Client.py
#!/usr/bin/env python3So führen Sie Programme und erwartete Ausgabe aus:
Hier sind die Schritte zur Ausführung des Programms.
STEP1: Gehen Sie zum B_SERVER -System und öffnen Sie ein Terminal. Abkürzung, um ein Terminal zu öffnen, ist Alt+Strg+t.
SCHRITT2: Gehen Sie nun den Pfad auf dem Server.PY ist vorhanden.
Schritt 3: Jetzt Server ausführen.py wie unten
Python3 Server.py
Es sollte keine Fehler geben, und Sie sollten folgende Drucke sehen
Der Server wird auf Port aufgelistet: 9898
Der kopierte Dateiname wird recv sein.TXT auf der Serverseite
STEP4: Jetzt öffnen Sie das Terminal am A_Client -System.
Schritt 5: Gehen Sie zum Pfad wo der Client.PY und Probe.TXT sind vorhanden.
STEP6: Jetzt Kunden ausführen.py wie unten
Python3 -Kunde.pyWir haben festgestellt, dass wir die IP -Adresse des Servers kennen müssen. Wir können den folgenden Befehl ausführen, um die IP -Adresse des B_SERVER -Systems zu kennen.
Ifconfig
Jetzt sollte die Ausgabe des A_Client -Systems so sein
################## Below message is received from server ##################
| ---------------------------------- |
Hallo Client [IP -Adresse: 192.168.1.102],
** Willkommen zum Server **
-Server
| ---------------------------------- |
STEP7: Gehen Sie nun zu B_SERVER und suchen Sie nach der folgenden Ausgabe
Die Datei wurde erfolgreich kopiert
Der Server hat die Verbindung getrennt
Schritt 8: Es sollte einen Dateinamen Recv geben.TXT im Serverordner. Der Inhalt dieses Recv.TXT sollte die gleiche Probe sein.txt.
Daher haben wir eine Datei vom Client zum Server über das Netzwerk erfolgreich über das Python -Programm kopiert.
Code Erklärungen:
Es gibt zwei Python -Dateien Server.py Und Klient.py.
Beachten Sie, dass wir einmal erklären, ob ein Code im Server gleich ist.Py und Kunde.py.
Dies ist Shebang -Zeile, was standardmäßig diesen Server bedeutet.PY sollte Python3 verwenden. Lassen Sie uns einen Vorteil dieser Linie sehen.
Wir haben den Server ausgeführt.PY oder Kunde.py wie Python3 . Jetzt können wir ohne Python3 die Python -Datei ausführen. Folgen Sie den folgenden Befehlen
Gehen Sie zum Super -Benutzer -Modus:
su
Geben Sie alle Erlaubnis an .PY -Datei:
CHMOD 777 Server.py
Server ausführen.PY:
./Server.pySocket importieren
Wir erstellen ein Objekt "S" Zugriff auf alle Methoden der Sockel. Dies ist ein OOPS -Konzept.
Port = 9898Jetzt wählen wir einen Port, an dem der Server zuhört. Wir können anstelle dessen nicht reservierte Port verwenden.
S.binden (", Port))Wir verwenden die Bind -Methode, um die Server -IP -Adresse an diesen Port zu binden [9898]. Eine Beobachtung ist.
S.binden ((IP -Adresse, Port))Wir haben einen Dateinamen "recv" geöffnet.txt ”auf dem Server für den Schreibmodus und erhielt Dateizeiger. Dies ist erforderlich, da wir eine Textdatei vom Client kopieren müssen.
während wahr:Beginnen wir einen unendlichen, während die Aufgabe des Servers ist, zu warten, bis ein Client mit dem Server über diesen 9898 -Port kommuniziert. Dies ist also während der Schleife erforderlich.
conn, addr = s.akzeptieren()Dieser Code wird eine eingehende Verbindungsanforderung vom Client annehmen. Conn wird verwendet “Conn “ mit dem Kunden zu kommunizieren und "ADDR" ist die IP -Adresse des Clients, der eine Aufnahmeanforderung an diesen Server auf Port 9898 gesendet hat.
msg = "\ n \ n | ---------------------------------Dieser Code soll eine Nachricht zum Senden an den Client erstellen. Diese Nachricht sollte auf dem Client -Terminal gedruckt werden. Dies bestätigt, dass der Client mit dem Server kommunizieren kann.
Conn.Senden (msg.kodieren())Jetzt haben wir die Nachricht bereit und senden sie dann mit dieser an den Client "Conn". Dieser Code senden tatsächlich eine Nachricht an den Client.
Recvdata = conn.recv (1024)Dieser Code empfängt alle Daten, die von der Client -Seite gesendet werden. In unserem Fall erwarten wir den Inhalt der Stichprobe.txt in "Recvdata".
während recvdata:Noch eine, während die Schleife mit Bedingung recvdata nicht leer ist. In unserem Fall ist es nicht leer.
Datei.schreiben (recvdata)Sobald wir Inhalte im Inneren haben "Recvdata" Dann schreiben wir in diese Datei “Recv.txt" Verwenden von Dateizeiger "Datei".
Recvdata = conn.recv (1024)Versuchen Sie erneut zu empfangen, wenn Daten vom Client vorhanden sind. Einmal "Recvdata" hat keine Daten.
Datei.schließen()Dadurch schließt der Dateizeiger einfach, wie wir mit Datei schreiben sind.
Conn.schließen()Dies schließt die Verbindung mit dem Kunden.
brechenDies soll von unendlich in B_SERVER in unendlicher Schleife herauskommen.
Importieren der SYS -Bibliothek, da wir Argumentanlagen in Python verwenden möchten.
if (len (sys.argv)> 1):Wenn wir die IP -Adresse von B_SERVER nach dem Dateinamen -Client übergeben.Py Während des Ausführens müssen wir diese Server -IP -Adresse im Client fangen.
… Wenn (Len (sys.Argv)> 1): => Um sicherzustellen "Serverip".
Wenn der Benutzer nicht mindestens einen Argumentcode übergibt, zeigt Hilfe und kommt aus dem Code heraus.
Port = 9898Dies muss der gleiche Port sein, der auf der B_SERVER -Seite erwähnt wird.
S.Connect ((Serverip, Port))Dieser Code führt die TCP -Verbindung zum Server -IP mit diesem Port durch. An diesem Ponint -Ergebnis ist etwas auszusetzen zu Fehlern im Zusammenhang.
Datei = open ("Beispiel.txt "," rb ")Wir öffnen „Probe“.txt ”im Lesemodus, um nur Inhalte zu lesen.
SendData = Datei.Read (1024)Lesen Sie den Inhalt der Datei und einfügen “Daten senden" Variable.
während sendData:Wir starten eine während der Schleife, wenn “Daten senden" hat Daten. In unserem Fall, wenn „Beispiele“.txt ”ist nicht leer, es sollte Daten haben.
S.send (sendData)Jetzt können wir Inhalte von senden "Probe.txt" zum Server mithilfe des Socket -Objekts "S".
SendData = Datei.Read (1024)Nochmals lesen, wenn noch etwas übrig ist. Es gibt also nichts zu lesen aus der Datei "Daten senden" wird leer sein und es wird aus der Schleife herauskommen.
S.schließen()Dies schließt die Verbindung nicht von der Client -Seite.
Ubuntu Screenshots Serverseite
Ubuntu Screenshots Client -Seite
Getestete Kombinationen:
Die Empfehlung lautet, zwei Linux -Systeme für Server und Client zu verwenden.
Traceback (letzte Anruflast):
Datei "Client.py ", Zeile 22, in
S.Connect ((Serverip, Port))
ConnectionRefusedError: [Errno 111] Verbindung abgelehnt
Rennen wie
Python3 -Kunde.py < serverip address >
Traceback (letzte Anruflast):
Datei "Client.py ", Zeile 22, in
S.Connect ((Serverip, Port))
Steckdose.Gaierror: [Errno -2] Name oder Dienst nicht bekannt
Traceback (letzte Anruflast):
Datei "Client.py ", Zeile 22, in
S.Connect ((Serverip, Port))
Überblowerror: Getockaddrarg: Port muss 0-65535 sein.
Traceback (letzte Anruflast):
Datei "Client.py ", Zeile 25, in
Datei = open ("Beispiel.txt "," rb ")
FilenotFoundError: [Errno 2] Keine solche Datei oder Verzeichnis: 'Beispiel.txt'
Mit diesem Programm können wir über das Python -Programm eine einfache Textdatei von einem System über das Netzwerk über das Netzwerk senden. Dies gibt uns das grundlegende Lernen von Python- und Socket -Programmierung auch zum Senden von Daten über das Netzwerk.