python Socket文件传输代码

环境:
Ubuntu16.04
Python3.5

客户端代码:

import socket
import tqdm
import os

#设置服务器的IP和端口
SERVER_HOST="192.168.43.207"
SERVER_PORT=5001
#设置文件读写的缓冲区
BUFFER_SIZE=4096
# 传输数据分隔符
SEPARTOR = "<SERPARTOR>"
#创建server
s=socket.socket()
s.bind((SERVER_HOST,SERVER_PORT))
#设置链接监听数
s.listen(5)
#print("服务器端监听{}:{}",format(SERVER_HOST,SERVER_PORT))
#print(f"服务器端监听{SERVER_HOST}:{SERVER_PORT}")
#接收客户端链接
client_socket,address=s.accept()
#打印客户端的IP
print("客户端{}链接".format(address))
#接收客户端信息
received=client_socket.recv(BUFFER_SIZE).decode()
filename,file_size=received.split(SEPARTOR)
#获取文件的名字
filename=os.path.basename(filename)
file_size=int(file_size)
#文件的接收处理
progress = tqdm.tqdm(range(file_size),"接收{}".format(filename),unit='B',unit_divisor=1024,unit_scale=True)
with open(filename,"wb") as f:
    for _ in progress:
        #从客户端读取数据
        bytes_read=client_socket.recv(BUFFER_SIZE)
        #如果没有数据传输内容
        if not bytes_read:
            break
        #读取写入
        f.write(bytes_read)
        #更新进度条
        progress.update(len(bytes_read))
#关闭资源
client_socket.close()
s.close()

服务端代码:

import socket
import tqdm
import os

# 传输数据分隔符
SEPARTOR = "<SERPARTOR>"
#服务器信息
host="192.168.43.207"
port=5001
#文件传输的缓冲区
BUFFER_SIZE=4096
#传输文件名字
filename="202002.pdf"
#文件大小
file_size=os.path.getsize(filename)
#创建socket链接
s=socket.socket()
#链接服务器
print("服务器连接中{}:{}".format(host,port))
s.connect((host,port))
print("与服务器连接成功!")
#发送文件名字和文件大小,必须进行编码处理encode()
s.send(("{}{}{}".format(filename,SEPARTOR,file_size)).encode())
#文件传输
progress=tqdm.tqdm(range(file_size),"发送{}".format(filename),unit="B",unit_divisor=1024)
with open(filename,"rb") as f:
    for _ in progress:
        #读取文件
        bytes_read=f.read(BUFFER_SIZE)
        if not bytes_read:
            break
        #sendall可以确保即使网络忙碌的时候有,数据仍然可以传输
        s.sendall(bytes_read)
        progress.update(len(bytes_read))
#关闭资源
s.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yhwang-hub

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值