最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
当前位置: 首页 - 科技 - 知识百科 - 正文

python实现客户端和服务器端传输图片的代码

来源:懂视网 责编:小采 时间:2020-11-27 14:11:49
文档

python实现客户端和服务器端传输图片的代码

python实现客户端和服务器端传输图片的代码:本篇文章给大家带来的内容是关于python实现客户端和服务器端传输图片的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。问题:以windows作为客户端,linux作为服务器端,进行传输图程序:''' Fuction:客户端发
推荐度:
导读python实现客户端和服务器端传输图片的代码:本篇文章给大家带来的内容是关于python实现客户端和服务器端传输图片的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。问题:以windows作为客户端,linux作为服务器端,进行传输图程序:''' Fuction:客户端发
本篇文章给大家带来的内容是关于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()

运行结果:
服务器端:

2039470964-5b92843fc1a66_articlex.png

客户端:

1526422411-5b92823cc424e_articlex.png

补充说明:
1.首先在linux系统下运行server.py(python server.py),然后在windows python 终端下运行client.py,在终端输入当前目录下要传输的图片名,即heat.jpg,可以看到在服务器的路径下出现了new_heat.jpg图片文件,证明文件传输成功。
2.刚开始在参考网上的代码时出现了各种错误,其中在调试时一直出现接收到的图片数据丢失,打不开图片,弄懂struct.pack的压缩格式之后,发现是因为参数设置的问题,原来是128sl,其中l是长整型,超出范围的话接收到的图片数据就丢失,故改为q之后范围变大,能够正常接收图片。下图是struct.pack的压缩格式和数据范围对应表:

1832972653-5b927ef6c239a_articlex.png
相关推荐:

Python XML RPC服务器端和客户端实例

python实现TCP服务器端与客户端的方法详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文档

python实现客户端和服务器端传输图片的代码

python实现客户端和服务器端传输图片的代码:本篇文章给大家带来的内容是关于python实现客户端和服务器端传输图片的代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。问题:以windows作为客户端,linux作为服务器端,进行传输图程序:''' Fuction:客户端发
推荐度:
标签: 图片 Windows 代码
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top