• socket 实现udp 上传下载


    from socket import *
    import struct,sys
    get_filename = None
    def sock_config():
        global  get_filename
        get_filename = input("请输入下载的文件名:")
        send_data = struct.pack("!H"+str(len(get_filename))+"sb5sb",1,get_filename.encode("utf-8"),0,"octet".encode("utf-8"),0)
        udp_socket = socket(AF_INET, SOCK_DGRAM)
        udp_socket.bind(('',65533))
        udp_socket.sendto(send_data,("172.16.0.134",69))
        udp_socket.close()
        #sock_send = socket()
    def sock_requst():
        request_sock = socket(AF_INET,SOCK_DGRAM)
        request_sock.bind(('',65533))
        create_file = False
        open_value = None
        check = 1
        while True:
            ret, recv_addr = request_sock.recvfrom(1024)
            oper = struct.unpack("!HH",ret[:4])
    
            if oper[0] == 5:
                print("文件不存在!")
                break
            else:
                create_file = True
            if create_file and open_value == None:
                f = open(get_filename, "wb+")
                open_value = 1
                create_file = False
            print(check," ",oper[1])
            if check == oper[1]:
                f.write(ret[4:])
            request_sock.sendto(struct.pack("!HH",4,oper[1]),(recv_addr[0],recv_addr[1]))
            print(oper, recv_addr, ret)
            #print("---第%d次写入---"%oper[1])
            if len(ret[4:]) < 512 :
                f.close()
                print("upload succend!")
                break
            check = oper[1]+1
    
        request_sock.close()
    def mian():
        sock_config()
        sock_requst()
    if __name__ == "__main__":
        mian()
    from socket import *
    import struct
    
    def upload_request():
        send_Data = struct.pack("!H10sb5sb",2,"images.png".encode("utf-8"),0,"octet".encode("utf-8"),0)
        upload_socket = socket(AF_INET,SOCK_DGRAM)
        upload_socket.bind(('',65532))
        upload_socket.sendto(send_Data,("172.16.0.134",69))
        f = open("test.png","rb+")
        request_Data, recv_Addr = upload_socket.recvfrom(1024)[:4]
        request_ack, request_num = struct.unpack("!HH", request_Data[:4])
        num = 1
        if request_ack == 4 :
            while True:
                request_Data, recv_Addr = upload_socket.recvfrom(1024)[:4]
                request_ack, request_num = struct.unpack("!HH", request_Data[:4])
                if request_ack == 3 or request_ack == 4 :
                    f_read = f.read(512)
                    send_Data = struct.pack("!HH" + str(len(f_read)) + "s", 3,num,f_read)
                    upload_socket.sendto(send_Data,recv_Addr)
                print(recv_Addr)
                print(request_ack,request_num,recv_Addr,send_Data)
                num += 1
        f.close()
        upload_socket.close()
    if __name__ == "__main__":
        upload_request()
  • 相关阅读:
    [转] css3变形属性transform
    [转] ReactJS之JSX语法
    [转] 那些在使用webpack时踩过的坑
    [转] jQuery的deferred对象详解
    [转] Webpack-CommonsChunkPlugin
    [转] 用webpack的CommonsChunkPlugin提取公共代码的3种方式
    Refs & DOM
    [转] Webpack的devtool和source maps
    [转] 编译输出文件的区别
    GDB && QString
  • 原文地址:https://www.cnblogs.com/gzww/p/7463022.html
Copyright © 2020-2023  润新知