首页 > 编程语言 > 详细

python基础实现tcp文件传输

时间:2019-04-10 15:48:33      阅读:144      评论:0      收藏:0      [点我收藏+]

准备工作,实现文件上传需要那些工具呢?

  socket(传输)、open()(打开文件)、os(读取文件信息),当然还有辅助类sys和json,下面我们开始吧

import socket,sys
import json,os

#创建socket对象
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

#获取本地主机名
host = socket.gethostname()

#设置端口号
port = 9000

#绑定端口
server.bind((host,port))

#设置最大连接数
server.listen(5)

#建立连接
while True:
    print(开始监听)
    #建立客户端连接
    clint,addr = server.accept()
    print("连接地址: %s" % str(addr))
    #接收文件属性数据,创建文件
    jsonObj = json.loads(clint.recv(1024).decode(utf-8))
    print(接收到数据,jsonObj)
    if not jsonObj :
        os.mknod(jsonObj[name])
    msg = json.dumps({name:消息,信号:创建成功})
    #回数据确认已经建立新文件
    clint.send(msg.encode(utf-8))
    #接收数据
    size = 0
    sizeValue = int(jsonObj[size])
    print(开始接收数据)
    with open(jsonObj[name], wb) as file:
        while size < sizeValue:
            value = sizeValue - size
            if value >1024:
                getdate = clint.recv(1024)
            else :
                getdate = clint.recv(value)
            file.write(getdate)
            size += 1024
    print(结束)
    #关闭连接
    clint.close()

 

客户端

‘‘‘发送文件
Usage:
clint.py <name> [<rename>]

‘‘‘
import socket
import os,json,sys

#建立json数据,包含文件名以及大小
#{name:name,size:99999}
date = {}
if len(sys.argv) == 2:
    print(type(sys.argv[1]))
    name = sys.argv[1].split(\\)[-1]
    date[name] = name
else:
    date[name] = sys.argv[2]
date[size] = os.path.getsize(sys.argv[1])
jsonString = json.dumps(date).encode(utf-8)

#create connection
clint = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 获取本地主机名
host = socket.gethostname()
# 设置端口好
port = 9000
# 连接服务,指定主机和端口
clint.connect((host, port))
#发送文件属性信息
clint.send(jsonString)
#接收服务端发过来的确认信息
clint.recv(1024)
#发送文件数据
size = 0
with open(sys.argv[1],rb) as file:
    while size < date[size]:
        fileDate = file.read(1024)
        clint.send(fileDate)
        size += 1024
#关闭连接
clint.close()

 

python基础实现tcp文件传输

原文:https://www.cnblogs.com/hardykay/p/10683394.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!