python:socket传输大文件示例


Posted in Python onJanuary 18, 2017

文件可以传输,但是对比传输前后的文件:socket_test.txt,末尾有一些不一致服务端代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
import time
'''
等待连接
等待发送文件
读取数据
写入文件并且保存
等待连接
'''
import socket
import threading
import time
import struct


def function(newsock, address):
  FILEINFO_SIZE = struct.calcsize('128sI')
  '''定义文件信息(包含文件名和文件大小)大小。128s代表128个char[](文件名),I代表一个integer or long(文件大小)'''
  while 1:
    try:
      fhead = newsock.recv(FILEINFO_SIZE)
      filename, filesize = struct.unpack('128sI', fhead)
      '''把接收到的数据库进行解包,按照打包规则128sI'''
      print "address is: ", address
      print filename, len(filename), type(filename)
      print filesize
      #filename = 'new_'+filename.strip('\00') # 命名新文件new_传送的文件
      filename = filename.strip('\00')
      fp = open(filename, 'wb') # 新建文件,并且准备写入
      restsize = filesize
      print "recving..."
      while 1:
        if restsize > 102400: # 如果剩余数据包大于1024,就去1024的数据包
          filedata = newsock.recv(10240)
        else:
          filedata = newsock.recv(restsize)
          fp.write(filedata)
          #break
        if not filedata:
          break
        fp.write(filedata)
        restsize = restsize - len(filedata) # 计算剩余数据包大小
        if restsize <= 0:
          break
      fp.close()
      print "recv succeeded !!File named:", filename
    except Exception, e:
      print unicode(e).encode('gbk')
      print "the socket partner maybe closed"
      newsock.close()
      break
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建tcp连接
sock.bind(('10.240.146.82', 8887)) # 定于端口和ip
sock.listen(5) # 监听
while True:
  newsock, address = sock.accept()
  print "accept another connection"
  tmpThread = threading.Thread(target=function, args=(newsock, address)) # 如果接收到文件,创建线程
  tmpThread.start() # 执行线程
print 'end'

客户端代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
'''
输入文件名,并且上传
'''
import socket
import time
import struct
import os
f = open('socket_test.txt', 'wb')

for i in range(1000000):
  f.write('for socket test, the line number is : ' + str(i) + '\n')

f.close()

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(50)
e = 0
try:
  sock.connect(('10.240.146.82', 8887))
  print 'connect...'
except socket.timeout, e:
  print 'timeout', e
except socket.error, e:
  print 'error', e
except e:
  print 'any', e
if not e:
  #while (1):
    #filename = raw_input('input your filename------->') # 输入文件名
  filename = 'socket_test.txt'
  FILEINFO_SIZE = struct.calcsize('128sI') # 编码格式大小
  fhead = struct.pack('128sI', filename, os.stat(filename).st_size) # 按照规则进行打包
  sock.send(fhead) # 发送文件基本信息数据
  fp = open(filename, 'rb')
  fp2 = open('local_test.txt','wb')
  i = 0
  while 1: # 发送文件
    filedata = fp.read(10240)
    if not filedata:
      break
    sock.sendall(filedata)
    fp2.write(filedata)
    print i
    i = i + 1
  print "sending over..."
  fp.close()
  fp2.close()

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的socket编程入门
Jan 29 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Python DataFrame设置/更改列表字段/元素类型的方法
Jun 09 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
用python爬取租房网站信息的代码
Dec 14 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Flask模板引擎之Jinja2语法介绍
Jun 26 Python
python文字转语音的实例代码分析
Nov 12 Python
解决pycharm 安装numpy失败的问题
Dec 05 Python
python操作cfg配置文件方式
Dec 22 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
Python 保存加载mat格式文件的示例代码
Aug 04 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 #Python
python实现下载整个ftp目录的方法
Jan 17 #Python
ansible作为python模块库使用的方法实例
Jan 17 #Python
python 基础教程之Map使用方法
Jan 17 #Python
Python获取某一天是星期几的方法示例
Jan 17 #Python
Python正则表达式匹配中文用法示例
Jan 17 #Python
python下如何查询CS反恐精英的服务器信息
Jan 17 #Python
You might like
Flash空降上海 化身大魔王接受挑战
2020/03/02 星际争霸
比file_get_contents稳定的curl_get_contents分享
2012/01/11 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
linux实现php定时执行cron任务详解
2013/12/24 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
JavaScript制作简单的日历效果
2016/03/10 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
基于JS快速实现导航下拉菜单动画效果附源码下载
2016/10/27 Javascript
JS中位置与大小的获取方法
2016/11/22 Javascript
JavaScript实现垂直向上无缝滚动特效代码
2016/11/23 Javascript
jQuery和CSS仿京东仿淘宝列表导航菜单
2017/01/04 Javascript
[js高手之路]HTML标签解释成DOM节点的实现方法
2017/08/31 Javascript
angular第三方包开发整理(小结)
2018/04/19 Javascript
微信小程序中的canvas 文字断行和省略号显示功能的处理方法
2018/11/14 Javascript
使用Phantomjs和Node完成网页的截屏快照的方法
2019/07/16 Javascript
vue 如何使用递归组件
2020/10/23 Javascript
利用python实现微信头像加红色数字功能
2018/03/26 Python
Python利用Django如何写restful api接口详解
2018/06/08 Python
Python通过paramiko远程下载Linux服务器上的文件实例
2018/12/27 Python
python 的 openpyxl模块 读取 Excel文件的方法
2019/09/09 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
2020/01/25 Python
PyQt5如何将.ui文件转换为.py文件的实例代码
2020/05/26 Python
Python logging模块原理解析及应用
2020/08/13 Python
基于python模拟TCP3次握手连接及发送数据
2020/11/06 Python
深入理解css属性的选择对动画性能的影响
2016/04/20 HTML / CSS
html5 touch事件实现触屏页面上下滑动(二)
2016/03/10 HTML / CSS
经典而简洁的婚礼主持词
2014/03/13 职场文书
初中英语演讲稿
2014/04/29 职场文书
诚信贷款承诺书
2014/05/30 职场文书
离婚协议书范本(通用篇)
2014/11/30 职场文书
优秀大学生自荐信
2015/03/26 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python