python 使用socket传输图片视频等文件的实现方式


Posted in Python onAugust 07, 2019

在开发一些需要网络通信的应用中,经常会用到各种网络协议进行通信,博主在开发实验室的机器人的时候就遇到了需要把机器人上采集到的图片传回服务器进行处理识别,在python下的实现方式如下(只贴出了关键代码)

服务器端

LOCAL_IP = '192.168.100.22'  #本机在局域网中的地址,或者写127.0.0.1
PORT = 2567          #指定一个端口
def server():
  sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # socket.AF_INET 指ipv4 socket.SOCK_STREAM 使用tcp协议
  sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) #设置端口
  sock.bind((LOCAL_IP, PORT))    #绑定端口
  sock.listen(3)          #监听端口
  while True:
    sc,sc_name = sock.accept()  #当有请求到指定端口是 accpte()会返回一个新的socket和对方主机的(ip,port)
    print('收到{}请求'.format(sc_name))
    infor = sc.recv(1024)    #首先接收一段数据,这段数据包含文件的长度和文件的名字,使用|分隔,具体规则可以在客户端自己指定
    length,file_name = infor.decode().split('|')
    if length and file_name:
      newfile = open('image/'+str(random.randint(1,10000))+'.jpg','wb') #这里可以使用从客户端解析出来的文件名
      print('length {},filename {}'.format(length,file_name))
      sc.send(b'ok')  #表示收到文件长度和文件名
      file = b''
      total = int(length)
      get = 0
      while get < total:     #接收文件
        data = sc.recv(1024)
        file += data
        get = get + len(data)
      print('应该接收{},实际接收{}'.format(length,len(file)))
      if file:
        print('acturally length:{}'.format(len(file)))
        newfile.write(file[:])
        newfile.close()
        sc.send(b'copy')  #告诉完整的收到文件了
    sc.close()

客户端

address = ('192.168.100.22', 2567)
def send(photos):
  for photo in photos[0]:
    print('sending {}'.format(photo))
    data = file_deal(photo)
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    sock.connect(address)
    sock.send('{}|{}'.format(len(data), file).encode())  #默认编码 utf-8,发送文件长度和文件名
    reply = sock.recv(1024)
    if 'ok' == reply.decode():       #确认一下服务器get到文件长度和文件名数据
      go = 0
      total = len(data)
      while go < total:            #发送文件
        data_to_send = data[go:go + 1024]
        sock.send(data_to_send)
        go += len(data_to_send)
      reply = sock.recv(1024)
      if 'copy' == reply.decode():
        print('{} send successfully'.format(photo))
    sock.close()           #由于tcp是以流的形式传输数据,我们无法判断开头和结尾,简单的方法是没传送一个文件,就使用一个socket,但是这样是消耗计算机的资源,博主正在探索更好的方法,有机会交流一下
def file_deal(file_path):  #读取文件的方法
  mes = b''
  try:
    file = open(file_path,'rb')
    mes = file.read()
  except:
    print('error{}'.format(file_path))
  else:
    file.close()
    return mes

总结

以上所述是小编给大家介绍的python 使用socket传输图片视频等文件的实现方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python高级应用实例对比:高效计算大文件中的最长行的长度
Jun 08 Python
用Python制作简单的钢琴程序的教程
Apr 01 Python
详解Python之数据序列化(json、pickle、shelve)
Mar 30 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
Oct 21 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
Python操作多维数组输出和矩阵运算示例
Nov 28 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
keras CNN卷积核可视化,热度图教程
Jun 22 Python
python音频处理的示例详解
Dec 23 Python
selenium3.0+python之环境搭建的方法步骤
Feb 01 Python
python 装饰器重要在哪
Feb 14 Python
能让Python提速超40倍的神器Cython详解
Jun 24 Python
python获取Pandas列名的几种方法
Aug 07 #Python
python 提取文件指定列的方法示例
Aug 07 #Python
PyQt Qt Designer工具的布局管理详解
Aug 07 #Python
Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str
Aug 07 #Python
python利用7z批量解压rar的实现
Aug 07 #Python
django基础学习之send_mail功能
Aug 07 #Python
python实现本地批量ping多个IP的方法示例
Aug 07 #Python
You might like
杏林同学录(七)
2006/10/09 PHP
PHP性能优化准备篇图解PEAR安装
2011/12/05 PHP
PHP中Session和Cookie是如何操作的
2015/10/10 PHP
Linux系统下使用XHProf和XHGui分析PHP运行性能
2015/12/08 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
PHP设计模式之工厂方法设计模式实例分析
2018/04/25 PHP
PHP实现通过strace定位故障原因的方法
2018/04/29 PHP
PHP超低内存遍历目录文件和读取超大文件的方法
2019/05/01 PHP
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
jstl中判断list中是否包含某个值的简单方法
2016/10/14 Javascript
浅谈Javascript事件对象
2017/02/05 Javascript
vue-cli入门之项目结构分析
2017/04/20 Javascript
javascript定时器取消定时器及优化方法
2017/07/08 Javascript
Vue 滚动行为的具体使用方法
2017/09/13 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
JS实现百度搜索接口及链接功能实例代码
2018/02/02 Javascript
VUE兄弟组件传值操作实例分析
2019/10/26 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
2020/04/30 jQuery
微信小程序国际化探索实现(附源码地址)
2020/05/20 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
Python open读写文件实现脚本
2008/09/06 Python
python中遍历文件的3个方法
2014/09/02 Python
跟老齐学Python之玩转字符串(3)
2014/09/14 Python
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
Python操作Elasticsearch处理timeout超时
2020/07/17 Python
Python基础教程(一)——Windows搭建开发Python开发环境
2020/07/20 Python
Python进行统计建模
2020/08/10 Python
python中xlutils库用法浅析
2020/12/29 Python
用HTML5制作烟火效果的教程
2015/05/12 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
新电JAVA笔试题目
2014/08/31 面试题
意向协议书
2015/01/27 职场文书
护理心得体会范文
2016/01/22 职场文书
Python基础之元组与文件知识总结
2021/05/19 Python
MYSQL(电话号码,身份证)数据脱敏的实现
2021/05/28 MySQL