zoukankan      html  css  js  c++  java
  • tcp文件下载客户端+服务端

    客户端:

    import socket
    
    if __name__ == '__main__':
        # 创建tcp客户端socket
        tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 和服务端socket建立连接
        tcp_client_socket.connect(("192.168.131.106", 7878))
        # 接收用户输入的文件名
        file_name = input("请输入您要下载的文件对应的名字:")
        # 对字符串进行编码
        file_name_data = file_name.encode("gbk")
        # 发送下载文件的请求信息
        tcp_client_socket.send(file_name_data)
        # 定义二进制空的数据
        result_file_data = b""
        # 循环接收数据
        while True:
            # 获取服务端发送的文件二进制数据
            file_data = tcp_client_socket.recv(1024)
            if file_data:
                # 拼接每次读取的数据
                result_file_data += file_data
            else:
                break
        # 判断文件是否有数据
        if result_file_data:
            # 写入到指定文件里面, with open 文件操作完成以后关闭文件是系统自己操作的
            with open("/home/python/Desktop/" + file_name, "wb") as file:
                file.write(result_file_data)
        else:
            print("文件为空")
        # 关闭socket
        tcp_client_socket.close()

    服务端:

    import socket
    import os
    
    if __name__ == '__main__':
        # 创建tcp服务端socket
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 绑定端口号
        tcp_server_socket.bind(("", 7878))
        # 设置监听,把主动套接字改成被动套接字,被动套接字只能接收客户端连接请求,不能收发消息,收发消息使用新的套接字
        tcp_server_socket.listen(128)
        # 注意点:目前服务端是单任务的一个人下载完成以后另外一个人才能再下载
        # 循环接收客户端连接请求
        while True:
            # 等待接收客户端的连接请求
            tcp_service_socket, ip_port = tcp_server_socket.accept()
            print(ip_port)
            # 接收客户端的请求信息,其实文件名
            file_name_data = tcp_service_socket.recv(1024)
            # 对二进制数据进行解码获取文件名字符串
            file_name = file_name_data.decode("gbk")
            # "路径/" + file_name 判断指定路径是否有对应的文件
            # file_name在当前工程判断该文件是否存在
            if os.path.exists(file_name):
                # 打开指定文件把数据发送给客户端
                with open(file_name, "rb") as file:
                    while True:
                        # 读取文件中的数据
                        file_data = file.read(1024)
                        # 判断数据是否为空
                        if file_data:
                            # 发送数据给客户端
                            tcp_service_socket.send(file_data)
                        else:
                            break
            print(file_name, ip_port)
            # 和客户端终止服务
            tcp_service_socket.close()
        # 关闭服务端套接字,以后不再接收客户端的连接请求
        tcp_server_socket.close()
    

      

  • 相关阅读:
    uva 1510
    ADN中国团队參加微软的Kinect全国大赛获得三等奖
    在 window7 window8下公布webService注意问题
    html5调用手机摄像头,实现拍照上传功能
    4、深入理解Bean
    恶补jquery(四)jquery中事件--冒泡
    html5css3杂记
    Core Data 和 sqlite3的性能对比【图】3gs,iPhone4,4s,5的性能测试。
    boost 的函数式编程库 Phoenix入门学习
    information_schema模式表介绍 processlist
  • 原文地址:https://www.cnblogs.com/wf-skylark/p/9104437.html
Copyright © 2011-2022 走看看