网络通信tcp tcp下载器案例的python语法实现

TCP协议

TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议。TCP通信需要经过创建连接、数据传送、终止连接三个步骤。类似于日常生活中打电话的场景,需要建立链接,确认发送结果,安全传输。

下载案例:

客户端

import socket

def main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 强制允许端口复用
    tcp_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # 链接服务器
    dest_ip = input("请输入下载服务器ip:")
    dest_port = int(input("请输入下载服务器port:"))
    tcp_socket.connect((dest_ip,dest_port))

    # 发送信息 文件名
    download_file_name = input("请输入要下载的文件名:")
    tcp_socket.send(download_file_name.encode("utf-8"))

    # 接收文件
    recv_data = tcp_socket.recv(1024)

    if recv_data:
        # 保存接收到的数据发到一个文件夹中
        with open("[新]" + download_file_name,"wb") as f:
            f.write(recv_data)
    # 关闭套接字
    tcp_socket.close()

if __name__ == '__main__':
    main()

服务器

import socket

def send_file_2_client(new_server_socket,client_addr):
    # 1.接收客户端发来的 要下载的文件名
    file_name = new_server_socket.recv(1024).decode("utf-8")
    print("客户端(%s)需要下载的文件名是:" % str(client_addr),file_name)

    file_content = None
    # 2.打开文件并读取数据
    try:
        f = open(file_name,"rb")
        file_content = f.read()
        f.close()
    except Exception as ret:
        print("没有要下载的文件(%s)" % file_name)

    # 3.发送文件的数据给客户端
    if file_content:
        new_server_socket.send(file_content)

def main():
    # 创建套接字
    tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 强制允许端口复用
    tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

    # 绑定本地信息
    tcp_server_socket.bind(("",7890))

    # 监听套接字状态转为被动
    tcp_server_socket.listen(128)

    while True:
        # 等待客户端链接
        new_server_socket,client_addr = tcp_server_socket.accept()

        # 调用发送文件函数,完成客户端服务
        send_file_2_client(new_server_socket,client_addr)

        # 关闭套接字
        new_server_socket.close()
    tcp_server_socket.close()

if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/weixin_44850984/article/details/89213200
今日推荐