TCP案例——客户端循环向服务器下载文件

效果:

客户端                                                                                                服务器

TCP案例——客户端循环向服务器下载文件TCP案例——客户端循环向服务器下载文件

客户端代码:

import socket


def main():
    while True:
        # 1.创建套接字
        client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # 2.连接服务器
        # dest_ip = input("请输入服务器的IP:")
        # dest_port = int(input("请输入服务器的端口:"))

        client_socket.connect((‘192.168.2.100‘, 7788))

        # 3.向服务器发送要下载的文件

        file_name = input("请输入您要下载的文件名:")
        client_socket.send(file_name.encode(‘utf-8‘))

        # 4.接收文件——recv内单位是字节
        recv_data = client_socket.recv(1024)
        # print(recv_data)

        # 5.写入文件
        # 如果文件有内容才写入文件
        if recv_data:
            with open(‘[接收]‘ + file_name, ‘wb‘) as f:
                f.write(recv_data)
            print("文件下载完成")
        else:
            print("要下载的文件不存在或为空。")
        # 6.关闭套接字
        client_socket.close()


if __name__ == ‘__main__‘:
    main()

服务器代码:

import socket


def main():
    while True:
        # 1.创建监听套接字
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

        # 2.绑定IP和Port
        tcp_server_socket.bind((‘‘, 7788))

        # 3.设置为被动监听
        tcp_server_socket.listen(128)

        try:
            while True:
                # 4.等待客户端连接
                print(‘等待客户端连接中......‘)
                client_socket, client_adress = tcp_server_socket.accept()
                print(‘已连接客户端 %s‘ % str(client_adress))

                # 5.获取客户端需要的文件并回传给客户端
                file_name = client_socket.recv(1024)
                print("%s 客户端需要下载的文件为:%s" % (str(client_adress), file_name.decode(‘utf-8‘)))

                # 如果有,将文件回传给客户端。没有则打印文件不存在
                file_content = None
                try:
                    f = open(file_name, ‘rb‘)
                    file_content = f.read()
                    print("已发送文件给客户端")
                except Exception as ent:
                    print("文件不存在!")
                if file_content:
                    client_socket.send(file_content)

                # 6.关闭套接字
                client_socket.close()
        except:
            print("客户端异常断开")
        tcp_server_socket.close()


if __name__ == ‘__main__‘:
    main()