python传输大文件_python之socket运用之传输大文件

本文介绍如何使用Python的socket模块处理大文件传输。由于socket默认最大传输单元限制,当传输超过8192个字符的数据时会出现问题。通过在客户端和服务端设置循环接收和发送,可以实现大文件的完整传输。客户端不断接收服务端的文件块并累计,服务端则根据文件大小分块发送数据。
摘要由CSDN通过智能技术生成

socket建议最大的传输单元是8192个字符,但是如果超过8192就会出现问题,我们可以用下面的方法处理

客户端代码

import subprocess

import socket

ip_bind = ("127.0.0.1",9000)

client = socket.socket()

client.connect(ip_bind)

l1 = []

while True:

option = input("client:")

client.sendall(bytes(option,encoding="utf-8"))

server_data_size = client.recv(50)

print(server_data_size)

a = str(server_data_size,encoding="utf-8").strip()

print(a)

l1 = a.split(":")

print(l1)

if l1[0] == "server_data_size":

client_size_tmp = l1[1]

print(client_size_tmp)

client_size = int(client_size_tmp)

print(type(client_size))

client.send(bytes("ok",encoding="utf-8"))

receive_size = 0

res = ""

while receive_size < client_size:

server_data = client.recv(100)

receive_size += len(server_data)

res += str(server_data)

else:

print(res)

print("-------reveive down---------")

服务端代码

import subprocess

import socket

ip_bind = ("127.0.0.1",9000)

server = socket.socket()

server.bind(ip_bind)

server.listen(1)

print("server is waiting........")

conn,add = server.accept()

print("server is connected client")

while True:

client_data = conn.recv(50)

a = subprocess.Popen(str(client_data,encoding="utf-8"),stdout=subprocess.PIPE)

b = a.stdout.read()

server_data_size = "server_data_size:" + str(len(b))

conn.sendall(bytes(server_data_size,encoding="utf-8"))

client_ack = conn.recv(10)

if str(client_ack,encoding="utf-8") == "ok":

conn.sendall(b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值