python实现客户端和服务器端传输图片
问题:以windows作为客户端,linux作为服务器端,进行传输图片
程序:
'''
Fuction:客户端发送图片和数据
Date:2018.9.8
Author:snowking
'''
###客户端client.py
import socket
import os
import sys
import structdef 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.jpgfhead = 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))breaks.send(data) #以二进制格式发送图片数据s.close()# break #循环发送if __name__ == '__main__':sock_client_image()
###服务器端server.py
import socket
import os
import sys
import structdef 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 = 0fp = 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 = filesizefp.write(data) #写入图片数据fp.close()sock.close()breakif __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的压缩格式和数据范围对应表:
声明:该图表来自https://blog.csdn.net/u011006...
python实现客户端和服务器端传输图片相关推荐
- python客户端与服务器端_Python实现的FTP通信客户端与服务器端功能示例
本文实例讲述了Python实现的FTP通信客户端与服务器端功能.分享给大家供大家参考,具体如下: 一 代码 1.服务端代码 import socket import threading import ...
- 用python和NetAssist来做TCP客户端和服务器端
轻松下载一个网络调试助手,用python实现TCP通信 目录 前言 一.TCP是什么? 1.TCP(Transmission Control Protocol)概念 2.TCP通信的简明三步骤 3.T ...
- 手机客户端和服务器端通信
2019独角兽企业重金招聘Python工程师标准>>> 手机客户端与服务器端的通信,不同于浏览器与服务器端的通信.浏览器和服务器端的通信依靠session去维持一个会话, 当这一切搬 ...
- android客户端从服务器端获取json数据并解析的实现代码
2019独角兽企业重金招聘Python工程师标准>>> 首先客户端从服务器端获取json数据 1.利用HttpUrlConnection 代码如下: /** * 从指定的URL中获取 ...
- 客户端与服务器端的区别(Client-Side Vs. Server-Side)
此文翻译自: Client-Side Vs. Server-Side By Skillcrush 在此机翻加人工校验了一下,力求信达雅,不恰当指出还望批评指出,望予海涵.有条件的直接啃生肉吧. 客户端 ...
- web与服务器之间的信息交互,web客户端与服务器端如何进行交互
web客户端与服务器端如何进行交互 内容精选 换一换 开启了 Kerberos认证的安全模式集群,进行应用开发时需要进行安全认证.Kerberos这一名词来源于希腊神话"三个头的狗--地狱之 ...
- 深入Atlas系列:Web Sevices Access in Atlas示例(6) - 在客户端隐藏服务器端类型信息...
如果要在客户端指定服务器端Web Service方法所接收的参数类型,就必须在客户端通过"__type"来指定,但是这就暴露了服务器端的具体类型了,这可不太好.现在我们就来看一下应 ...
- 浅析Java web程序之客户端和服务器端交互原理
原文链接: https://www.iteye.com/topic/470019 1. 协议 a. TCP/IP整体构架概述 TCP/IP协议并不完全符合OSI的七层参考模型.传统的开放式系统互连参考 ...
- VSS 2005 客户端和服务器端配置总结
花了差不多一天的时间把vss配置搞明白了~废话不多说,下面简单的介绍下配置的过程: 安装VSS2005(客户端和服务器端都需要),当然必须有VS2008或者2005的前提下. 配置前的准备: 1.在在 ...
最新文章
- 如何将你在公有云环境中的漏洞找出来?
- 大地图开发管理:《巫师3》Umbra遮挡剔除技术
- Failed to execute request because the App-Domain could not be created
- 应用程序部署策略——虚拟机与容器
- foxmail占cpu 100%解决办法
- Prim算法的C语言程序
- Android5.0 netd架构流程
- 5.7. Text Processing
- Java基于SSH技术的毕业设计管理系统
- 计算机iis配置具体步骤,IIS配置运行ASP网站配置与注意事项
- 论文笔记:ALA loss:Adaptive Logit Adjustment Loss for Long-Tailed Visual Recognition
- [网络]网速很快但是访问网页很慢的两种解决办法
- Unity连接MySQL数据库方法整合
- STM32模拟I2C程序
- 百度网盘直链下载助手(MacOSChrome)
- 怎么用dw修改PHP网页模板,【网站模板如何使用】从网站下载的网页模板在dwcs6中如何修改使用?什么是网页设计模板,如何利用网页设计模板?...
- ios app 下载地址收集(一点一点收集中...)
- Gbit以太交换BCM56504
- 树莓派4B通过16路PWM输出的PCA9685模块控制舵机(机械臂)附完整代码
- 支付宝常用接口统一封装,可直接支付参数使用(适用于H5、PC、APP)