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()
复制代码

 

posted @   大道至简,小而蕴真  阅读(4816)  评论(2编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示