您的位置:首页 > 理论基础 > 计算机网络

Python使用tcp编写一个简易的文件下载器(服务端和客户端)

2018-03-13 23:47 696 查看
使用tcp编写一个简易的文件下载器
要求:需编写文件下载器服务端和文件下载器客户端

客户端:

"""
(1)创建客户端socket
(2)连接服务端ip和端口
(3)send消息或recv消息
(4)关闭客户端socket

"""
import socket

def main():
    # 创建socket
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 获取用户输入的服务器ip,port,文件名
    server_ip = input("请输入服务器ip:")
    server_port = int(input("请输入服务器端口:"))
    file_name = input("请输入要下载的文件名:")
    # 连接服务器
    tcp_client_socket.connect((server_ip, server_port))
    # 发送请求的文件名
    tcp_client_socket.send(file_name.encode("utf-8"))
    # 接收返回的内容写入文件
    file_content = tcp_client_socket.recv(1024*1024)
    # 内容不为空就写入文件
    if file_content:
        with open("download_"+file_name, "wb") as f:
            f.write(file_content)
    # 关闭客户端socket
    tcp_client_socket.close()

if __name__ == '__main__':
    main()

服务端:

"""
(1)创建服务端socket
(2)绑定服务端ip和端口
(3)把服务端socket设置为listen模式,由主动接收信息改为被动接收信息
(4)等待客户端连接accept
(5)创建对应客户端socket
(6)使用对应客户端socket收发信息
(7)关闭对应客户端socket
(8)关闭服务端socket
"""
import socket

def get_content_file(file_name):
    """这是获取文件内容的函数"""
    try:
        with open("/home/python/Desktop/"+file_name, "rb") as f:
            content = f.read()
            return content
    except:
        print("输入的文件不存在")

def main():
    # 创建服务端socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    # 绑定服务端socket的ip和端口
    server_socket.bind(("", 6666))
    # 设置服务端的监听为被动模式
    server_socket.listen(5)

    while True:
        # 等待客户端的连接
        new_client_socket, client_addr = server_socket.accept()
        # 客户端传送过来请求要下载的文件名
        recv_data = new_client_socket.recv(1024)
        file_name = recv_data.decode("utf-8")
        # 打开文件进行读操作函数,获取返回值作为内容
        file_content = get_content_file(file_name)
        # 把内容发送给客户端
        new_client_socket.send(file_content)
        # 关闭对应客户端socket
        new_client_socket.close()

    # 关闭服务端socket
    server_socket.close()

if __name__ == '__main__':
    main()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: