文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python用tcp实现局域网内文件传输

2023-01-31 01:47

关注

功能:
可以利用python创建的TCP客户端从我们自己搭建的TCP服务器上下载文件.
实现需求:
安装socket模块
简单了解sokcet模块用法

服务器代码如下:

import socket


def file_deal(file_name):
    # 定义函数用于处理用户索要下载的文件
    try:
        # 二进制方式读取
        files = open(file_name, "rb")

        mes = files.read()

    except:


        print("没有该文件")

    else:

        files.close()

        return mes

def main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 固定端口号
    tcp_socket.bind(("",8888))
    # 将主动套接字转为被动套接字
    tcp_socket.listen(128)

    while True:
        # 利用accept获取分套接字以及客户端的地址
        client_socket,client_addr = tcp_socket.accept()
        # 接收客户端的数据
        file_name = client_socket.recv(4096)
        # 调用函数处理用户下载的文件
        mes = file_deal(file_name)

        if mes:
            # 如果文件不为空发送

            client_socket.send(mes)
        #关闭分套接字

        client_socket.close()



if __name__ == "__main__":
    main()

import socket


def file_deal(file_name):
    # 定义函数用于处理用户索要下载的文件
    try:
        # 二进制方式读取
        files = open(file_name, "rb")

        mes = files.read()

    except:


        print("没有该文件")

    else:

        files.close()

        return mes

def main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 固定端口号
    tcp_socket.bind(("",8888))
    # 将主动套接字转为被动套接字
    tcp_socket.listen(128)

    while True:
        # 利用accept获取分套接字以及客户端的地址
        client_socket,client_addr = tcp_socket.accept()
        # 接收客户端的数据
        file_name = client_socket.recv(4096)
        # 调用函数处理用户下载的文件
        mes = file_deal(file_name)

        if mes:
            # 如果文件不为空发送

            client_socket.send(mes)
        #关闭分套接字

        client_socket.close()



if __name__ == "__main__":
    main()

客户端代码:

from socket import *
import os


def main():
    # 建立套接字
    tcp_socket = socket(AF_INET, SOCK_STREAM)
    # 接收用输入的服务器端的ip和端口
    tcp_ip = input("请输入ip:")

    tcp_port = int(input("请输入端口:"))
    # 连接服务器
    tcp_socket.connect((tcp_ip, tcp_port))
    # 输入要下载的文件名
    file_name = input("请输入要下载的文件名:")

    # 将文件名发送至服务器端
    tcp_socket.send(file_name.encode())
    # 创建一个空文件
    new_file = open(file_name, "wb")
    # 用与计算读取的字节数
    time = 0

    while True:
        # 接收服务器端返回的内容
        mes = tcp_socket.recv(4096)
        # 如果内容不为空执行
        if mes:
            # 解码并向文件内写入
            new_file.write(mes.decode())

            # 计算字节
            time += len(mes)

        else:
            # 如果字节数为空即未收到内容
            if time == 0:
                # 关闭文件
                new_file.close()
                # 删除刚刚创建的文件
                os.remove(file_name)
                print("没有您要下载的文件")
            else:
                # 如过time有值时name文件传输完成
                print("文件下载成功")

            break
    # 关闭套接字
    tcp_socket.close()


if __name__ == '__main__':
main()
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯