码迷,mamicode.com
首页 > Web开发 > 详细

socket编程实现文件的上传和下载

时间:2018-10-06 16:32:44      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:end   enumerate   文件的   listen   绝对路径   nec   路径   send   上传   

server端

#!/usr/bin/env python
# coding:utf-8
import socket
import struct
import json
buffer = 1024
sk = socket.socket()
sk.bind((127.0.0.1,8888))
sk.listen()
conn,addr = sk.accept()
ret = conn.recv(4)
len_operate_c = struct.unpack(i,ret)[0]
operate_c = conn.recv(len_operate_c)
operate_c = operate_c.decode(utf-8)
if operate_c == upload:
    res = conn.recv(4)
    len_head = struct.unpack(i,res)[0]
    head = conn.recv(len_head).decode(utf-8)
    head = json.loads(head)
    filesize = head[filesize]
    filename = head[filename]
    with  open (filename,wb) as  f:
        while filesize:
            if filesize >= buffer:
                content = conn.recv(buffer)
                f.write(content)
                filesize -= buffer
            else :
                content = conn.recv(filesize)
                f.write(content)
                filesize = 0
conn.close()
sk.close()

client端

#!/usr/bin/env python
# coding:utf-8
def get_filename(file_path):
    return os.path.basename(file_path)
import socket
import os
import json
import struct
buffer = 1024
sk = socket.socket()
sk.connect((127.0.0.1,8888))
operate = [download,upload]
for  k,j  in  enumerate(operate,1) :
    print(k,j)
num = int(input(请输入你的选项: ))
operate_c = operate[(num-1)]
len_operate_c = len(operate_c)
print(len_operate_c)
res = struct.pack(i,len_operate_c)
sk.send(res)
sk.send(operate_c.encode(utf-8))
if operate_c == upload :
    head = {filename:None,filesize:None,}
    file_path = input("请输入要上传的文件绝对路径 :")
    filename = get_filename(file_path)
    head[filename] = filename
    filesize = os.path.getsize(file_path)
    head[filesize]=filesize
    json_head = json.dumps(head)
    len_head = len(json_head)
    ret = struct.pack(i,len_head)
    sk.send(ret)
    sk.send(json_head.encode(utf-8))
    with open (file_path,rb) as f:
        while filesize:
            if filesize >= buffer :
                content =  f.read(buffer)
                sk.send(content)
                filesize -= buffer
            else :
                content = f.read(filesize)
                sk.send(content)
                filesize = 0
sk.close()

 

socket编程实现文件的上传和下载

标签:end   enumerate   文件的   listen   绝对路径   nec   路径   send   上传   

原文地址:https://www.cnblogs.com/weidaijie/p/9747416.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!