socket文件上传下载

socket文件上传下载

# server

import socket
import json
import struct
import os

sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.listed(5)

while True:
    conn,addr = sk.accept()
    while True:
        dic = {'size':os.path.getsize('test.py'),'name':'shabi.py'}
        dic_b = bytes(json.dumps(dic),encoding= 'utf8')
        dic_b_len = len(dic_b)
        obj = struct.pack('i',dic_b_len)
        conn.send(obj)  # 发送打包好的
        conn.send(dic_b)
        with open('test.py','rb') as f:
            for i in f:
                conn.send(i)
    conn.close()
sk.close()
# client

import socket
import struct
import json

sk.socket.socket()
sk.connect(('127.0.0.1',8080))
sure = input('开始接收>>>?')
if sure == 'y':
    head_len = struct.unpack("i",sk.recv(4))[0]
    dic = json.loads(sk.recv(head_len))
    l = dic['size']
    name = dic['name']
    c = 0
    data = b''
    with open(name,'wb') as f:
        while c<l:
            if l<1024:
                data_in = sk.recv(l)
            else:
                if l-c>1024:
                    data_in = sk.recv(1024)
                else:
                    data_in = sk.recv(l-c)
            data += data_in
            c += len(data_in)
        f.write(data)
    print(f'{name}文件接收完成!')
else:
    print('接收失败!')
sk.close()

转载于:https://www.cnblogs.com/dadazunzhe/p/11495422.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值