クライアント側とサーバー側の画像送信を実装するための Python コード
この記事の内容は、クライアント側とサーバー側の画像送信を実現するためのPythonのコードに関するもので、一定の参考価値はありますので、困っている方は参考にしていただければ幸いです。
問題: Windows をクライアントとして使用し、Linux をサーバーとして使用してグラフを転送します。
プログラム:
''' 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()
実行結果:
サーバー側:
1. 最初に Linux システムでserver.py (python server.py) を実行し、次に Windows Python ターミナルで client.py を実行し、現在のディレクトリに転送するイメージの名前を入力します。ターミナル (heat .jpg) では、new_heat.jpg 画像ファイルがサーバー パスに表示され、ファイル転送が成功したことがわかります。
2. 当初、インターネット上のコードを参照すると様々なエラーが発生し、デバッグ中に受信した画像データが失われ続け、画像が開けなくなってしまいましたが、struct.packの圧縮形式を理解したところ、原因はパラメータ設定の問題で元々は128sl(lは長整数)で、その範囲を超えると受信した画像データが失われてしまうため、qに変更したところ範囲が広くなり画像が受信できるようになりました通常は。次の図は、struct.pack の圧縮形式とデータ範囲の対応表です。
関連する推奨事項:
TCP サーバーとクライアントを Python で実装する方法の詳細な説明
以上がクライアント側とサーバー側の画像送信を実装するための Python コードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

Pythonスクリプトは、特定の場所のカーソル位置への出力をどのようにクリアしますか? Pythonスクリプトを書くときは、以前の出力をカーソル位置にクリアするのが一般的です...

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

GoまたはRustを使用してPythonスクリプトを呼び出して、真の並列実行を実現する方法は?最近、私はPythonを使用しています...

Pythonのサブプロセスモジュールを使用してWMICを実行します...

毎日のネットワークインタラクションでPythonを使用したクラッキング検証コードの調査、検証コードは、自動化されたプログラムの悪意のある操作を防ぐための一般的なセキュリティメカニズムです...

Pythonマルチプロセスパイプエラー「パイプは閉じています」? PythonのMultiprocessing Moduleでパイプメソッドを使用して、親子プロセス通信を使用する場合、遭遇する可能性があります...
