点击上方蓝字,关注:无量测试之道
作者 | 无量测试之道编辑 | 小 晴
今天继续和大家分享Python UDP 协议网络编程系列知识。
今日主题:使用Python 实现的上传文件的客户端功能。
温馨提示:今日内容与前期推文Python UDP 协议网络编程《三》具有关联性,如果Python UDP 协议网络编程《三》没有阅读的小伙伴,建议先阅读后,再来学习今天的内容,有助于更好的理解哟(点击蓝色字体的推文名称即可查看上一篇文章全部内容)。
今日分享内容与上篇文章主题:使用Python 实现的下载文件的客户端功能一样,理论内容较少,今天更偏实战性,以下实现代码需仔细分析、理解每一行代码的作用及相互间的关联关系,并自行搭建本地环境将代码运行起来,在解决问题的过程中,通过思考与实践才能更好的理解本文主题。
1import struct 2from socket import * 3 4server_ip = '127.0.0.1' 5filename='requirements.txt' 6 7def upload_file(): 8 # 9 send_data_1 = struct.pack('!H%dsb5sb'%len(filename),2,filename.encode('utf-8'),0,b'octet',0)10 udp_socket = socket(AF_INET,SOCK_DGRAM)11 udp_socket.sendto(send_data_1,(server_ip,69)) #第一次发给服务器69端口12 filehandle = open(filename,'rb')13 recv_data = udp_socket.recvfrom(1024) #第一次接收数据14 rand_port = recv_data[1][1]15 # ack_num = struct.unpack("!HH",recv_data[0][:4])16 num = 017 while True:18 read_data = filehandle.read(512)19 send_data = struct.pack('!HH',3,num) + read_data20 udp_socket.sendto(send_data,(server_ip,rand_port)) #第二次发给服务器的随机端口21 recv_data_2,userinfo = udp_socket.recvfrom(1024)22 print(recv_data_2)23 ack_num = struct.unpack('!H',recv_data_2[2:4])24 print(len(read_data),num,ack_num[0],rand_port)25 if len(read_data) 512 or ack_num[0] != num :26 filehandle.close()27 break28 num = num + 12930def user_login():31 udp_socket = socket(AF_INET, SOCK_DGRAM) # 建议upd连接32 local_address = ('127.0.0.1', 8000) # 定义了本机的ip and port33 udp_socket.bind(local_address) # 绑定本机的ip and port34 resvice_address=('127.0.0.1', 69) #定义了接收消息机器的ip and port35 data="admin 123456"36 udp_socket.sendto(str(data).encode("utf-8"),resvice_address)#向接收消息机器发送消息37 udp_socket.close()38 udp_secv_msg()3940def udp_secv_msg():41 udp_sockets = socket(AF_INET, SOCK_DGRAM) # 建立udp socker连接42 server_address = ('127.0.0.1', 70) # 定义了服务端的ip and port43 udp_sockets.bind(server_address) # 服务端绑定ip and port44 recv_data = udp_sockets.recvfrom(1024) # 收数据等待45 print('接收的内容:', recv_data[0].decode('utf-8')) # 显示收到的信息46 print('发送人的地址:', recv_data[1]) # 显示收到的信息47 udp_sockets.close()4849if __name__ == '__main__':50 # 第一步登录tftp服务器51 user_login()52 # 第二步是上传文件53 upload_file()
如在代码运行过程中遇到任何问题,欢迎在公众号后台留言,或在【无量测试之道~技术交流群】提出你的疑问,我们一起参与讨论解决。
如果今天的分享对你有帮助的话,请毫不犹豫:关注、分享、点赞、在看、收藏呀~
你的鼓励将会是我创作的最大动力。
点个赞,点个在看再走吧~~~