zoukankan      html  css  js  c++  java
  • tcp案例之文件下载器

    文件下载器客户端

    import socket
    
    
    def main():
        # 1.创建一个tcp socket
        tcp_client_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
        #2. 连接服务端
        tcp_client_socket.connect(('127.0.0.1',9999))
    
        #3. 获取用户输入的文件名
        file_name=input("请输入要下载的文件名:")
    
        # 4. 把要下载的文件名发给服务端
        tcp_client_socket.send(file_name.encode())
    
        #5. 等待接收服务端回传的文件内容
        recv_data=tcp_client_socket.recv(1024*1024) # 一次最多接收1M字节
        print(recv_data)
    
        #6. 假如内容不为空,则写入到文件中
        if recv_data:
            with open("/home/python/Desktop/"+file_name,"wb") as f:
                f.write(recv_data)
    
        #7. 关闭tcp socket
        tcp_client_socket.close()
    
    
    if __name__ == '__main__':
        main()

    文件下载器服务端

    import socket
    
    
    def get_file_content(file_name):
        """通过文件名取得文件内容"""
        try:
            # 打开文件,读取数据   www.png
            file=open(file_name,"rb")
            content=file.read()
            file.close()
            return content
        except:
            print("%s下载的文件找不到"%file_name)
    
    
    def main():
        # 1. 创建服务端的socket,用来做监听的
        server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    
        # 复用端口
        server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
    
        # 2. 绑定端口
        server_socket.bind(('',9999))
    
        # 3. 开启监听 listen
        server_socket.listen(5)
    
        # 4. 循环接收客户端的下载请求
        while True:
            new_sock,client_addr=server_socket.accept()
            print("有新的下载请求,来自-->",client_addr)
    
            #5. 获取客户端发送过来的要下载的文件名
            recv_data=new_sock.recv(1024) # 取得要下载的文件名
            # 把字节串转为字符串
            file_name=recv_data.decode()
    
            # 6.通过函数取得要下载的文件的内容
            file_content=get_file_content(file_name)
    
            # 7. 把内容回传给客户端
            if file_content:
                new_sock.send(file_content)
    
            # 8. 关闭与客户端对接的socket
            new_sock.close()
        #9. 关闭服务端server_socket,不再接收新的下载文件的请求
        server_socket.close()
    
    
    
    if __name__ == '__main__':
        main()
  • 相关阅读:
    jQuery学习笔记01
    webpack概念相关
    vue-cli4 配置公用scss样式的方法
    vue-cli4的路径别名
    webpack学习03——搭建本地服务器
    webpack学习02——Plungin的使用
    VSCode生成vue项目模板
    Vue的使用方法
    webpack学习01——初次打包
    文献随笔目录
  • 原文地址:https://www.cnblogs.com/xiaolu915/p/10511081.html
Copyright © 2011-2022 走看看