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”给客户端做应答 封装函数 ...
随机推荐
- JS对像和数组的遍历
零. 通用遍历方法 0.1 for...in... let obj = {0:"a", 1:"b", 2:"c"}; for (let ke ...
- Numpy的基础使用
数据分析: 是把隐藏在一些看似杂乱无章的数据背后的信息提取出来,总结出所研究对象的内在规律 数据分析的三剑客: Numpy, Pandas, Matplotlib NumPy(Numerical Py ...
- 55-python基础-python3-字典-删除键值对-del语句
字典-键值对的彻底删除 对于字典中不再需要的信息,可使用del 语句将相应的键—值对彻底删除. 使用del 语句时,必须指定字典名和要删除的键. 注意 删除的键—值对永远消失了.
- Newtonsoft.Json 转Json字符串为空不序列化
原文:Newtonsoft.Json 转Json字符串为空不序列化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://bl ...
- NGUI动态字体的创建(font maker)
1,打开font maker 2,在font maker中创建选择动态字体 PS: 1,动态字体相对静态字体来说,动态字体比较消耗性能 2,静态字体是创建在图集中,这也是没那么消耗性能的原因
- PCA算法和实例
PCA算法 算法步骤: 假设有m条n维数据. 1. 将原始数据按列组成n行m列矩阵X 2. 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值 3. 求出协方差矩阵C=1/mXXT 4. ...
- JavaScript —— 正则表达式元字符
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- vue项目一个页面使用多个轮播图详解
1.html代码: <div v-for="(item,index) in arrDataList.Floor"> // 根据后台数据循环渲染多个轮播图组件 <d ...
- (ACM模板)二元组pair
#include<iostream> #include<cstdio> #include<utility> using namespace std; typedef ...
- Thymeleaf 基本用法总结
Thymeleaf 基本用法总结 一.引用命名空间 <html xmlns:th="http://www.thymeleaf.org"> 在html中引入此命名空间,可 ...