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获取指定目录下所有文件名列表的方法
May 20 Python
Python代码解决RenderView窗口not found问题
Aug 28 Python
Python实现矩阵加法和乘法的方法分析
Dec 19 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
Python入门必须知道的11个知识点
Mar 21 Python
python利用插值法对折线进行平滑曲线处理
Dec 25 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 Python
Python实现CNN的多通道输入实例
Jan 17 Python
学习Python列表的基础知识汇总
Mar 10 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
Python中seaborn库之countplot的数据可视化使用
Jun 11 Python
Python pandas求方差和标准差的方法实例
Aug 04 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
php中解析带中文字符的url函数分享
2015/01/20 PHP
php实现每天自动变换随机问候语的方法
2015/05/12 PHP
php发送短信验证码完成注册功能
2015/11/24 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
2016/01/11 PHP
根据key删除数组中指定的元素实现方法
2017/03/02 PHP
php实现数组纵向转横向并过滤重复值的方法分析
2017/05/29 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
2017/11/14 PHP
一实用的实现table排序的Javascript类库
2007/09/12 Javascript
基于jquery的一个浮动框(扩展性比较好 )
2010/08/27 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理
2016/05/12 Javascript
easyui messager alert 三秒后自动关闭提示的实例
2016/11/07 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
Bootstrap + AngularJS 实现简单的数据过滤字符查找功能
2017/07/27 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
基于Proxy的小程序状态管理实现
2019/06/14 Javascript
jQuery实现判断滚动条滚动到document底部的方法分析
2019/08/27 jQuery
Selenium执行Javascript脚本参数及返回值过程详解
2020/04/01 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
2015/04/24 Python
浅谈Series和DataFrame中的sort_index方法
2018/06/07 Python
python xlsxwriter创建excel图表的方法
2018/06/11 Python
浅析python继承与多重继承
2018/09/13 Python
Python中实现单例模式的n种方式和原理
2018/11/14 Python
Django实现单用户登录的方法示例
2019/03/28 Python
python滑块验证码的破解实现
2019/11/10 Python
中级会计职业生涯规划范文
2014/01/16 职场文书
毕业实习评语
2014/02/10 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
歌唱比赛主持词
2014/03/18 职场文书
献爱心倡议书
2014/04/14 职场文书
百日安全活动总结
2014/05/04 职场文书
服务标兵事迹材料
2014/05/04 职场文书
竞聘演讲稿精彩开头和结尾
2014/05/14 职场文书
搞笑车尾标语
2014/06/23 职场文书