• python基础实现tcp文件传输


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

      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()
  • 相关阅读:
    ASP通过ADODB读取Access数据库
    Android中日期函数Calendar的一些用法和注意事项
    Android中Activity加入Fragment使用注意事项及常用技巧
    SQLite常用函数
    Linux下svn的安装与部署
    SpringMVC+MyBatis+MySQL 8小时链接断开
    教你怎么玩数独
    Eclipse3.2查找jre的问题
    java的集合框架
    第N次学习javaIO之后
  • 原文地址:https://www.cnblogs.com/hardykay/p/10683394.html
Copyright © 2020-2023  润新知