


Python-Code zur Implementierung der clientseitigen und serverseitigen Bildübertragung
Der Inhalt dieses Artikels befasst sich mit dem Code für die clientseitige und serverseitige Bildübertragung. Ich hoffe, dass er für Freunde hilfreich ist.
Problem: Verwenden Sie Windows als Client und Linux als Server, um das Diagramm zu übertragen
Programm:
''' Fuction:客户端发送图片和数据 Date:2018.9.8 Author:snowking ''' ###客户端client.py import socket import os import sys import struct def sock_client_image(): while True: try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('服务器的ip', 6666)) #服务器和客户端在不同的系统或不同的主机下时使用的ip和端口,首先要查看服务器所在的系统网卡的ip # s.connect(('127.0.0.1', 6666)) #服务器和客户端都在一个系统下时使用的ip和端口 except socket.error as msg: print(msg) print(sys.exit(1)) filepath = input('input the file: ') #输入当前目录下的图片名 xxx.jpg fhead = struct.pack(b'128sq', bytes(os.path.basename(filepath), encoding='utf-8'), os.stat(filepath).st_size) #将xxx.jpg以128sq的格式打包 s.send(fhead) fp = open(filepath, 'rb') #打开要传输的图片 while True: data = fp.read(1024) #读入图片数据 if not data: print('{0} send over...'.format(filepath)) break s.send(data) #以二进制格式发送图片数据 s.close() # break #循环发送 if __name__ == '__main__': sock_client_image()
###服务器端server.py import socket import os import sys import struct def socket_service_image(): try: s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # s.bind(('127.0.0.1', 6666)) s.bind(('服务器的ip', 6666)) s.listen(10) except socket.error as msg: print(msg) sys.exit(1) print("Wait for Connection.....................") while True: sock, addr = s.accept() #addr是一个元组(ip,port) deal_image(sock, addr) def deal_image(sock, addr): print("Accept connection from {0}".format(addr)) #查看发送端的ip和端口 while True: fileinfo_size = struct.calcsize('128sq') buf = sock.recv(fileinfo_size) #接收图片名 if buf: filename, filesize = struct.unpack('128sq', buf) fn = filename.decode().strip('\x00') new_filename = os.path.join('./', 'new_' + fn) #在服务器端新建图片名(可以不用新建的,直接用原来的也行,只要客户端和服务器不是同一个系统或接收到的图片和原图片不在一个文件夹下) recvd_size = 0 fp = open(new_filename, 'wb') while not recvd_size == filesize: if filesize - recvd_size > 1024: data = sock.recv(1024) recvd_size += len(data) else: data = sock.recv(1024) recvd_size = filesize fp.write(data) #写入图片数据 fp.close() sock.close() break if __name__ == '__main__': socket_service_image()
Ergebnisse ausführen:
Server:
Client:
Ergänzend Anleitung:
1. Führen Sie zuerst server.py (python server.py) unter dem Linux-System aus, führen Sie dann client.py unter dem Windows-Python-Terminal aus und geben Sie den Namen des zu übertragenden Bildes im aktuellen Verzeichnis ein Terminal, bei dem es sich um heat.jpg handelt, können Sie sehen, dass die Bilddatei new_heat.jpg im Serverpfad angezeigt wird, was beweist, dass die Dateiübertragung erfolgreich war.
2. Beim Verweisen auf den Code im Internet gingen zunächst immer wieder die empfangenen Bilddaten verloren und das Bild konnte nicht geöffnet werden Der Grund dafür war ursprünglich 128sl, wobei l eine lange Ganzzahl ist. Wenn es den Bereich überschreitet, gehen die empfangenen Bilddaten verloren. Daher wird der Bereich nach dem Wechsel zu q größer und Bilder können normal empfangen werden . Die folgende Abbildung zeigt die Komprimierungsformat- und Datenbereichskorrespondenztabelle von struct.pack:
Verwandte Empfehlungen:
Python XML RPC Server- und Client-Instanzen
Detaillierte Erläuterung der Methode zur Implementierung von TCP-Server und -Client in Python
Das obige ist der detaillierte Inhalt vonPython-Code zur Implementierung der clientseitigen und serverseitigen Bildübertragung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie lösten Python -Skripte an einem bestimmten Ort die Ausgabe in Cursorposition? Beim Schreiben von Python -Skripten ist es üblich, die vorherige Ausgabe an die Cursorposition zu löschen ...

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

Wie kann man Go oder Rost verwenden, um Python -Skripte anzurufen, um eine echte parallele Ausführung zu erreichen? Vor kurzem habe ich Python verwendet ...

Verwenden Sie das Subprozess -Modul von Python, um WMIC auszuführen ...

Die Untersuchung von Rissverifizierungscodes unter Verwendung von Python in täglichen Netzwerkinteraktionen sind ein häufiger Sicherheitsmechanismus, um eine schädliche Manipulation automatisierter Programme zu verhindern ...

Python Multi-Process-Rohrfehler "Pipe ist geschlossen"? Wenn Sie die Pipe-Methode in Pythons Multiprocessing-Modul für die Kommunikation über Eltern-Kind-Prozess verwenden, können Sie ...
