首页 > 其他 > 详细

利用socket 制做一个简易下载器模型(TCP)

时间:2019-11-16 09:33:32      阅读:89      评论:0      收藏:0      [点我收藏+]

下载其实需要两个模型,一是服务器方,作为应答及发送数据,另一个模型则是客户端方,发起下载请求且下载服务器发送的数据,有了这个概念基本上就可以写了。

 

1、客户端方代码

import socket

def main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)  #  socket创建套接字,DGRAM为UDP,STREAM为TCP

    # 输入需要绑定的服务器信息
    dest_ip = input("请输入服务器ip:")

    dest_port =int(input("请输入服务器porti:"))

    # 绑定服务器
    tcp_socket.connect((dest_ip,dest_port))   #  TCP需要绑定服务器IP端口,这点需要与UDP区分

    # 输入需要下载的文件名字
    file_name = input("请输入你要下载的文件名:")
    tcp_socket.send(file_name.encode(utf-8))
    # 收到信息并且下载
    data =  tcp_socket.recv(1024*1024)
    with open (+file_name,wb) as f:
        f.write(data)

    # 关闭套接字
    tcp_socket.close()


if __name__ == __main__:
    main()

2、服务器代码

import socket

def main():
    # 创建套接字
    tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    # 绑定本地信息
    local_addr = (‘‘,8080)
    tcp_socket.bind(local_addr)


    # 监听
    tcp_socket.listen(128)  #  TCP服务器具有监听,等待连接的环节
    
    # 提供下载服务
    new_client,client_addr = tcp_socket.accept()  # 等待连接环节,如果有客户端连接则返回一个元祖,元祖[0]是接下来收发信息使用的新套接字,元祖[1]则是连接的客户端地址
    file_name =  new_client.recv(1024).decode(utf-8)
    print(链接成功,来自%s %(str(client_addr)))
    try:
        f = open(file_name,rb)
        data = f.read()
    except Exception as t:
        print("文件名错误%s" %(t))
    new_client.send(data)
    new_client.close()
    tcp_socket.close()


if __name__ == "__main__":
    main()

以上代码,在linux上直接运行两个终端即可进行

利用socket 制做一个简易下载器模型(TCP)

原文:https://www.cnblogs.com/oslo254804746/p/11870531.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!