python基础实现tcp文件传输
准备工作,实现文件上传需要那些工具呢?
socket(传输)、open()(打开文件)、os(读取文件信息),当然还有辅助类sys和json,下面我们开始吧
import socket,sys
import json,os #创建socket对象
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #获取本地主机名
host = socket.gethostname() #设置端口号
port = 9000 #绑定端口
server.bind((host,port)) #设置最大连接数
server.listen(5) #建立连接
while True:
print('开始监听')
#建立客户端连接
clint,addr = server.accept()
print("连接地址: %s" % str(addr))
#接收文件属性数据,创建文件
jsonObj = json.loads(clint.recv(1024).decode('utf-8'))
print('接收到数据',jsonObj)
if not jsonObj :
os.mknod(jsonObj['name'])
msg = json.dumps({'name':'消息','信号':'创建成功'})
#回数据确认已经建立新文件
clint.send(msg.encode('utf-8'))
#接收数据
size = 0
sizeValue = int(jsonObj['size'])
print('开始接收数据')
with open(jsonObj['name'], 'wb') as file:
while size < sizeValue:
value = sizeValue - size
if value >1024:
getdate = clint.recv(1024)
else :
getdate = clint.recv(value)
file.write(getdate)
size += 1024
print('结束')
#关闭连接
clint.close()
客户端
'''发送文件
Usage:
clint.py <name> [<rename>] '''
import socket
import os,json,sys #建立json数据,包含文件名以及大小
#{name:name,size:99999}
date = {}
if len(sys.argv) == 2:
print(type(sys.argv[1]))
name = sys.argv[1].split('\\')[-1]
date['name'] = name
else:
date['name'] = sys.argv[2]
date['size'] = os.path.getsize(sys.argv[1])
jsonString = json.dumps(date).encode('utf-8') #create connection
clint = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口好
port = 9000
# 连接服务,指定主机和端口
clint.connect((host, port))
#发送文件属性信息
clint.send(jsonString)
#接收服务端发过来的确认信息
clint.recv(1024)
#发送文件数据
size = 0
with open(sys.argv[1],'rb') as file:
while size < date['size']:
fileDate = file.read(1024)
clint.send(fileDate)
size += 1024
#关闭连接
clint.close()
python基础实现tcp文件传输的更多相关文章
- 艺萌TCP文件传输及自动更新系统介绍(TCP文件传输)(四)
艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开源,作者是英国的,开发时间5年多,框架很稳定. 项 ...
- 艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输)(一)
艺萌TCP文件上传下载及自动更新系统介绍(TCP文件传输) 该系统基于开源的networkComms通讯框架,此通讯框架以前是收费的,目前已经免费并开元,作者是英国的,开发时间5年多,框架很稳定. 项 ...
- Python实现终端FTP文件传输
实现终端FTP文件传输 代码结构: .├── client.py├── readme.txt└── server.py 运行截图: readme.txt tftp文件服务器 项目功能: * 客户端有简 ...
- qt+boost::asio+tcp文件传输
客户端: void qt_boost::pbSendFileClicked(){ QString filename = ui.leFileName->text(); QByteArray ba ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- Java 简单TCP文件传输
服务端 package TCP; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputSt ...
- python基础——元组、文件及其它
Python核心数据类型--元组 元组对象(tuple)是序列,它具有不可改变性,和字符串类似.从语法上讲,它们便在圆括号中,它们支持任意类型.任意嵌套及常见的序列操作. 任意对象的有序集合:与字符串 ...
- python基础知识六 文件的基本操作+菜中菜
基础知识六 文件操作 open():打开 file:文件的位置(路径) mode:操作文件模式 encoding:文件编码方式 f :文件句柄 f = open("1.t ...
- Go语言 之TCP文件传输
服务端实现流程大致如下: 创建监听listener,程序结束时关闭. 阻塞等待客户端连接,程序结束时关闭conn. 读取客户端发送文件名.保存fileName. 回发“ok”给客户端做应答 封装函数 ...
随机推荐
- Meet in the middle算法总结 (附模板及SPOJ ABCDEF、BZOJ4800、POJ 1186、BZOJ 2679 题解)
目录 Meet in the Middle 总结 1.算法模型 1.1 Meet in the Middle算法的适用范围 1.2Meet in the Middle的基本思想 1.3Meet in ...
- ‘’‘安装PyMouse,个人日志'''
管理员启动CMD 1.直接pip install pymouse,成功安装, 2.安装PyHook: https://www.lfd.uci.edu/~gohlke/pythonlibs/ (向下滑动 ...
- Android关于Activity生命周期详解
子曰:溫故而知新,可以為師矣.<論語> 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精 ...
- vue.js(09)--v-for中的key
v-for中key的使用注意事项 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- H5中图片按照比例收缩,放大
需求:后台传过来的图片不能够压缩,即使部分被截取也可以 传统方案:设置img元素如下: width: auto; height: auto; max-width: 100%; max-height: ...
- shlwapi.h文件夹文件是否存在
{ if( NULL == lpszFileName) { return FALSE; } if (PathFileExists(lpszFileName)) { return TRUE; } els ...
- ltp-ddt smp_basic
SMP_S_FUNC_DUAL_CORE source functions.sh; cmd="stress-ng --matrix 4 -t 10s --perf --matrix-size ...
- PL SQL安装
首先,在官网下载PL SQL 的对应版本,本机是64位的就下载64位的,网址:https://www.allroundautomations.com/downloads.html#PLS 点击应用程序 ...
- 《嵌入式软件设计基础——基于ARM Cortex—M3》读书笔记
此书有点深,记录点自己能够看懂的. 1.内存管理一章:讲到变量的类型.生存周期.内存分配. auto static register 局部变量,全局变量 malloc free 内存碎片,消除内存池的 ...
- 在项目中使用 Maven 私服
#在项目中使用 Maven 私服 在 Maven settings.xml 中添加 Nexus 认证信息(servers 节点下): <server> <id>nexus-re ...