zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    hdu 1569 方格取数(2) 最大权独立集
    TCL脚本语言基础介绍
    Ubuntu10.04下Ckermit的使用
    LPC2468 Keil里设置RAM或Flash调试方法
    发布Android程式步骤
    Vim使用笔记(1): 安装
    在Android SDK里新建虚拟机出现:could not find virtual device named 'xxx'的解决办法
    git简单入门教程
    Jlink调试LPC2468
    Openrd 烧录uboot步骤
  • 原文地址:https://www.cnblogs.com/gzww/p/7463022.html
Copyright © 2011-2022 走看看