python3 实现TCPsocket传输文件(支持大文件)

该博客介绍了一种使用Python3通过TCP Socket进行大文件传输的方法,涉及的关键步骤包括将文件名和大小转换为二进制串发送,接收方依据包信息接收。文章提醒注意不同操作系统下数据类型大小可能不同可能导致的问题,且未涵盖异常处理部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键的思路是:

1、先要对包的信息(这里是文件名和大小)使用struct模块将其转化为二进制串发送给接收方

2、接收方d根据包信息进行接收

接收端:

import socket,struct
host = '0.0.0.0'
port = 3000
fmt = '128si' #文件名最长128 i表示文件大小 i的数据类型决定了最大能够传输多大的文件 
recv_buffer = 4096
listenSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
listenSock.bind((host, port))
while True:
    listenSock.listen(5)
    conn, addr = listenSock.accept()
    headsize = struct.calcsize(fmt)
    head = conn.recv(headsize)
    filename = struct.unpack(fmt, head)[0].decode().rstrip('\0') #要删掉用来补齐128个字节的空字符
    filename = '/tmp/'+filename 
    filesize = struct.unpack(fmt, head)[1]
    print("filename:" + filename + "\nfilesize:" + str(filesize))
    recved_size = 0
    fd = open(filename, 'wb')
    count = 0
    while True:
        data = conn.recv(recv_buffer)
        recved_size = recved_size + len(data) #虽然buffer大小是4096,但不一定能收满4096
        fd.write(data)
        if recved_size == filesize:
            break
    fd.cl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值