Python day08_TCP文件下载器

tcp 小尝试 文件下载器

为了真实模拟 客户端用windows 下面的pycharm 写的,服务端用ubuntu 下面的pycharm 写的

客户端

import socket

if __name__ == '__main__':

    # 创建tcpsocket客户端

    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 和服务端建立连接

    tcp_client_socket.connect(("192.168.36.111", 8989))

    # 接收用户输入文件名

    file_name = input("请输入您要下载的文件名:")

    # 对字符串数据进行编码

    file_data = file_name.encode("gbk")

    # 发送下载文件的数据请求

    tcp_client_socket.send(file_data)

    with open("/home/python/Desktop/" + file_name, "wb") as file:

        # 循环接收服务端文件内容数据

        while True:

            # 循环接收服务端文件内容数据

            file_data = tcp_client_socket.recv(1024)

            if file_data:

                # 把数据写入到对应的文件里面

                file.write(file_data)

            else:

                # 跳出循环,表示服务端文件数据发送完毕

                break

    # 关闭socket

    tcp_client_socket.close()

服务端

import socket

import os

if __name__ == '__main__':

    # 创建tcp服务端socket

    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 设置socket选项

    # 1. SOL_SOCKET: 表示当前socket

    # 2. SO_REUSEADDR:是否重用的选项

    # 3. True: 表示重用

    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)

    # 绑定端口号

    tcp_server_socket.bind(("", 8989))

    # 设置监听,把主动套接字改成被动套接字,被动套接字只负责接收客户端的连接请求

    tcp_server_socket.listen(128)

    # 提示:目前的服务端是单任务的下载,一个用户下载完成以后另外一个用户才能下载文件

    # 循环接收客户端连接请求

    while True:

        # 等待接收客户端的连接请求

        service_client_socket, ip_port = tcp_server_socket.accept()

        print(ip_port)

        # 代码执行到此表示客户端和服务端建立好连接了,用户就可以和客户端进行通信了

        file_name_data = service_client_socket.recv(1024)

        # 对数据进行解码

        file_name = file_name_data.decode("gbk")

        print(file_name)

        # file = open(file_name, "rb")

        # 1. 判断文件是否存在

        if os.path.exists(file_name):

            # 文件操作完成以后,自动关闭文件对象

            # file:表示文件对象

            with open(file_name, "rb") as file:

                while True:

                    # 读取数据

                    file_data = file.read(1024)

                    if file_data:

                        # 数据读取到了,然后发送给客户端

                        service_client_socket.send(file_data)

                    else:

                        # 文件数据读取完成,跳出循环

                        break

         else:

            print("文件不存在")

        service_client_socket.close()

    tcp_server_socket.close()

你可能感兴趣的:(Python day08_TCP文件下载器)