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中操作文件之write()方法的使用教程
May 25 Python
Python实现线程池代码分享
Jun 21 Python
python实现文本去重且不打乱原本顺序
Jan 26 Python
bat和python批量重命名文件的实现代码
May 19 Python
django开发之settings.py中变量的全局引用详解
Mar 29 Python
推荐10款最受Python开发者欢迎的Python IDE
Sep 16 Python
详解Python的三种可变参数
May 08 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
Python中无限循环需要什么条件
May 27 Python
Python如何读取、写入JSON数据
Jul 28 Python
Python中的面向接口编程示例详解
Jan 17 Python
使用python求解迷宫问题的三种实现方法
Mar 17 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
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
PHP中使用imagick生成PSD文件缩略图教程
2015/01/26 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
深入浅析安装PhpStorm并激活的步骤详解
2020/09/17 PHP
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
2013/05/08 Javascript
解析javascript 实用函数的使用详解
2013/05/10 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
Javascript实现字数统计
2015/07/03 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
JS正则表达式比较常见用法
2016/01/26 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
微信小程序的动画效果详解
2017/01/18 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
基于AngularJS的拖拽文件上传的实例代码
2017/07/15 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
vue计算属性+vue中class与style绑定(推荐)
2020/03/30 Javascript
vue设置默认首页的操作
2020/08/12 Javascript
Python 绘图和可视化详细介绍
2017/02/11 Python
浅谈python内置变量-reversed(seq)
2017/06/21 Python
对pandas的dataframe绘图并保存的实现方法
2017/08/05 Python
python实现五子棋人机对战游戏
2020/03/25 Python
Python使用文件操作实现一个XX信息管理系统的示例
2020/07/02 Python
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
动态密码技术
2012/10/18 面试题
综合办公室个人的自我评价
2013/12/22 职场文书
企业安全生产演讲稿
2014/05/09 职场文书
药剂专业求职信
2014/06/20 职场文书
长江三峡导游词
2015/01/31 职场文书
2016民族团结先进个人事迹材料
2016/02/26 职场文书
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
2021/06/26 MySQL