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 相关文章推荐
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 Python
Python实现分段线性插值
Dec 17 Python
python Pexpect 实现输密码 scp 拷贝的方法
Jan 03 Python
Python和Go语言的区别总结
Feb 20 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
基于python监控程序是否关闭
Jan 14 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
JAVA及PYTHON质数计算代码对比解析
Jun 10 Python
pandas实现导出数据的四种方式
Dec 13 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
pytorch 两个GPU同时训练的解决方案
Jun 01 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
调整优化您的LAMP应用程序的5种简单方法
2011/06/26 PHP
php实现用于计算执行时间的类实例
2015/04/18 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
js 幻灯片的实现
2011/12/06 Javascript
javascript 兼容所有浏览器的DOM扩展功能
2012/08/01 Javascript
用NodeJS实现批量查询地理位置的经纬度接口
2016/08/16 NodeJs
JS原型与原型链的深入理解
2017/02/15 Javascript
详解angularjs 关于ui-router分层使用
2017/06/12 Javascript
React服务端渲染(总结)
2017/07/01 Javascript
jQuery封装placeholder效果实现方法,让低版本浏览器支持该效果
2017/07/08 jQuery
vue实现一个炫酷的日历组件
2018/10/08 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
[01:04:14]VP vs TNC 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
python计算程序开始到程序结束的运行时间和程序运行的CPU时间
2013/11/28 Python
python从入门到精通(DAY 3)
2015/12/20 Python
Python提取Linux内核源代码的目录结构实现方法
2016/06/24 Python
用python写一个windows下的定时关机脚本(推荐)
2017/03/21 Python
PyQt QListWidget修改列表项item的行高方法
2019/06/20 Python
Python3实现发送邮件和发送短信验证码功能
2020/01/07 Python
关于Python字符串显示u...的解决方式
2020/03/06 Python
使用pytorch实现论文中的unet网络
2020/06/24 Python
如何利用python生成MD5并去重
2020/12/07 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
EJB发布WEB服务一般步骤
2012/10/31 面试题
活动总结怎么写
2014/04/28 职场文书
村级换届选举方案
2014/05/10 职场文书
公司领导班子四风对照检查材料
2014/09/27 职场文书
党员自我剖析材料(群众路线)
2014/10/06 职场文书
捐资助学感谢信
2015/01/21 职场文书
放弃遗产继承公证书
2015/01/26 职场文书
碧霞祠导游词
2015/02/09 职场文书
小学运动会报道稿
2015/07/22 职场文书
python 统计代码耗时的几种方法分享
2021/04/02 Python
python 通过使用Yolact训练数据集
2021/04/06 Python