农业资讯网
当前位置: 首页 农业百科

python tcp数据流解析(PythonUDP协议网络编程六)

时间:2023-07-11 作者: 小编 阅读量: 1 栏目名: 农业百科

pythontcp数据流解析今天继续和大家分享PythonUDP协议网络编程系列知识。如果PythonUDP协议网络编程《四》没有阅读的小伙伴,建议先阅读后,再来学习今天的内容,会有一个比较直观的对比。

python tcp数据流解析?今天继续和大家分享Python UDP 协议网络编程系列知识,我来为大家讲解一下关于python tcp数据流解析?跟着小编一起来看一看吧!

python tcp数据流解析

今天继续和大家分享Python UDP 协议网络编程系列知识。

今日主题:Python 实现的使用命令行进行文件下载的功能。

温馨提示:今日内容与前期推文Python UDP 协议网络编程《四》具有一定的关联性,是在该文章的基础上进行的再一次改造。如果Python UDP 协议网络编程《四》没有阅读的小伙伴,建议先阅读后,再来学习今天的内容,会有一个比较直观的对比。

今日分享内容与已分享的Python UDP 协议网络编程系列推文一样,理论内容较少,今天更偏实战性,以下实现代码需仔细分析、理解每一行代码的作用及相互间的关联关系,可与Python UDP 协议网络编程《四》实现的功能进行对比,相信你会发现其中的不同。

同时建议小伙伴们自行搭建本地环境将代码运行起来,在解决问题的过程中,通过思考与实践才能更好的理解本文主题。

1import sys 2import struct 3from socket import socket,AF_INET,SOCK_DGRAM 4 5filename=""#定义要下载的文件名 6ftp_server_ip=""#定义服务器的ip地址 7username=""#用户名 8password=""#密码 910def run_cmd():11global filename,ftp_server_ip,username,password12if(len(sys.argv)!=3):13print("命令行格式不对,请参照以下标准")14print("="*100)15print("for example:")16print()17print("python python_tftp_download.py username:password@ftp_server_ip filename")18print("=" * 100)19exit()20else:21filename=sys.argv[2]22all=sys.argv[1]23username=str(all).split(":")[0]24password=str(all).split("@")[0].split(":")[1]25ftp_server_ip=str(all).split("@")[1]26print(ftp_server_ip)2728def download_file():29print("step1:准备开始下载" filename "文件")30send_data=struct.pack("!H%dsb5sb"%len(filename),1,filename.encode("utf-8"),0,b'octet',0) #封装一个读文件请求,上面的步骤131print("step2:建立一个udp socket连接")32udp_socket=socket(AF_INET,SOCK_DGRAM) #创建一个udp socket33print("step3:向tftp ip=127.0.0.1 port=69服务器发送读写请求")34udp_socket.sendto(send_data,(ftp_server_ip,69)) #向tftp 服务器发送读写请求35print("step4:新建一个文件句柄,为了接收想下载的文件内容")36fhandle=open(filename,'ab')#在本地创建一个文件,a表示追加,b表示二进制37while 1:38print("step5:开始接收消息,消息内容为接收的数据和服务器信息")39recv_data,server_info=udp_socket.recvfrom(1024) #接收数据,返回的是二维元组,第一个是接收的数据,第二个是服务器ip and port,上面的步骤240operation_code=struct.unpack("!H",recv_data[:2]) #获取操作码41ack_num=struct.unpack("!H",recv_data[2:4]) #获取数据块42print("step6: 获取操作码:", operation_code, "和数据块编号", ack_num)43print("step7: 打印:the server of info is:",server_info)44if operation_code==5:#5就是错误码45print("the file is not found")46break47print("step8:打印接收的数据:",recv_data)48print("step9:开始写文件")49fhandle.write(recv_data[4:])#写内容到文件,因为前四个字节是操作码和数据块,所以要从第四位开始写文件50print("step10:判断文件是否读取完成")51if(len(recv_data)<516):#判断文件是否读取完成,上面的步骤452fhandle.close()53break54'''553、ACK56操作码块编码572Bytes2Bytes58'''#因为发布ACK包的操作码与块编码都是2个字节,所以如下用的是HH59print("step10:封装确认包信息")60send_data1=struct.pack("!HH",4,ack_num[0]) #封装确认包信息61print("step11:获取服务器端ip and port")62server_port=server_info[1]#获取服务器端发送数据的随机端口63server_address=server_info[0]64print("step12:发送ACK 确认包信息")65udp_socket.sendto(send_data1,(server_address,server_port))#发送确认包信息,上面的步骤366print("step13:文件" filename "下载成功!!!")6768def user_login(data):69udp_socket = socket(AF_INET, SOCK_DGRAM)# 建议upd连接70local_address = ('127.0.0.1', 8001)# 定义了本机的ip and port71udp_socket.bind(local_address)# 绑定本机的ip and port72resvice_address=('127.0.0.1', 69) #定义了接收消息机器的ip and port73udp_socket.sendto(str(data).encode("utf-8"),resvice_address)#向接收消息机器发送消息74print("登录成功")75udp_socket.close()76udp_secv_msg()7778def udp_secv_msg():79print("开始接收消息")80udp_sockets = socket(AF_INET, SOCK_DGRAM)# 建立udp socker连接81server_address = (ftp_server_ip, 70)# 定义了服务端的ip and port82udp_sockets.bind(server_address)# 服务端绑定ip and port83print("正在接收消息")84recv_data = udp_sockets.recvfrom(1024)# 收数据等待85print("the data is:",recv_data)86print('接收的内容:', recv_data[0].decode('utf-8'))# 显示收到的信息87print('发送人的地址:', recv_data[1])# 显示收到的信息88udp_sockets.close()8990if __name__ == '__main__':91#命令格式校验92run_cmd()93data = username " " password94print(data)95#第一步登录tftp服务器96user_login(data)97#第二步是下载文件98download_file()

1执行的结果为: 2(venv) D:\BaiduNetdiskDownload\ows-project\wechat\docker-compose1>python pythonFFTP_download_command.py admin:123456@127.0.0.1 requirements.txt 3127.0.0.1 4admin 123456 5登录成功 6开始接收消息 7正在接收消息 8the data is: (b'\xe7\x99\xbb\xe5\xbd\x95\xe6\x88\x90\xe5\x8a\x9f,\xe5\x8f\xaf\xe4\xbb\xa5\xe5\xbc\x80\xe5\xa7\x8b\xe4\xb8\x8a\xe4\xbc\xa0\xe4\xb8\x8b\xe8\xbd\xbd\x 9e6\x96\x87\xe4\xbb\xb6\xe4\xba\x86\xef\xbc\x81\xef\xbc\x81\xef\xbc\x81', ('127.0.0.1', 8000))10接收的内容: 登录成功,可以开始上传下载文件了!!!11发送人的地址: ('127.0.0.1', 8000)12step1:准备开始下载requirements.txt文件13step2:建立一个udp socket连接14step3:向tftp ip=127.0.0.1 port=69服务器发送读写请求15step4:新建一个文件句柄,为了接收想下载的文件内容16step5:开始接收消息,消息内容为接收的数据和服务器信息17step6: 获取操作码: (3,) 和数据块编号 (0,)18step7: 打印:the server of info is: ('127.0.0.1', 64495)19step8:打印接收的数据: b'\x00\x03\x00\x00flask\r\nredis\r\npymysqlflask\r\nredis\r\npymysql'20step9:开始写文件21step10:判断文件是否读取完成22step13:文件requirements.txt下载成功!!!

    推荐阅读
  • 厨房油渍太严重怎么办(厨房油渍太重怎么办)

    厨房是个重油污的“产地”,每次做完饭,都要多开一段时间的烟机灶,生怕油烟抽不干净,影响家居环境,亲们有木有这样的同感?我们要做的不仅是去除这些油污,更要做好预防准备工作,没错!二是还能起到装饰的作用,比光秃秃的墙面更加有活力。当然了,对于无孔不入的油烟,我们也要提高警惕,灶台周围也不能忽视!能贴的地方都可以贴上,打理起来也方便,更不用担心弄脏墙面和灶台。

  • bn37是小米几的电池 bn37电池是小米几的电池

    bn37是红米6手机的电池,其拥有3000mAh的电池容量,在续航方面还算不错。bn37是小米几的电池bn37是红米6的电池。红米6搭载了HelioP22八核处理器,采用5.45英寸18:9全面屏,80.7%屏占比,提供了铂银灰、樱花粉、巴厘蓝、流沙金四款配色。3GB内存起,红米6的后置摄像头使用了1200万+500万双摄像头,主摄采用1.25μm大像素,前置摄像头为500万像素,支持AI人像模式和智能美颜。上述就是关于bn37是小米几的电池内容介绍了,希望能对小伙伴们有所帮助。

  • 怎么样缓解早孕反应(盘点缓解早孕反应的方法)

    怎么样缓解早孕反应在妊娠早期,孕妇体内绒毛膜促性腺激素增多,胃酸分泌减少及胃排空时间延长,导致头晕,乏力、食欲不振、喜酸食物或厌恶油腻,恶心、晨起呕吐等一系列反应,统称为早孕反应。保灵孕宝告诉准妈妈想要科学、合理地减少孕吐,应该注意以下三点:1、保持心情轻松愉快。酒类应绝对禁止。

  • 柳汽乘龙h5载货车270马力(6.8米载货车也有超宽卧铺)

    铝合金油箱,实现轻量化原厂预留倒车影像线路和探头,卡友可根据实际情况调整至合适的位置。从动力链来看,玉柴大马力发动机配法士特8挡变速箱,更是迎合了当下对时效性的要求,兼顾效率和油耗,保证货物及时顺利达到。

  • 2022南昌公租房最新消息(2020年南昌公租房最新消息)

    2022年8月15日起南昌红谷滩区有一批2022年度清(腾)退公共租赁住房开放申请,更多南昌公租房最新消息详见正文。

  • 带花的诗句是哪些(带花的诗句有什么)

    夜来风雨声,花落知多少唐孟浩然《春晓》,今天小编就来说说关于带花的诗句是哪些?唐孟浩然《春晓》试问卷帘人,却道海棠依旧。唐王维《鸟鸣涧》采菊东篱下,悠然见南山。晋陶渊明《饮酒》忽如一夜春风来,千树万树梨花开。宋王安石《梅花》待到重阳曰,还来就菊花。唐孟浩然《过故人庄》接天莲叶无穷碧,映曰荷花别样红。唐白居易《钱塘湖春行》茅檐长扫净无苔,花木成畦手自栽。宋王安石《书湖阴先生壁》

  • 编曲的方法及注意事项(这两种错误的编曲方法)

    Cubase功能:方面它具备了一个编曲软件所应该具备的所有功能,唯一不好的是它的较新版本的破解版不具有完整正版的全部功能,但对于一个入门的小白来说已经完全够用了。土豪Mac的象征,因为它是唯一款只有Mac能用的宿主软件,有多少Windows用户为了用它花费大量时间精力去装黑苹果系统,可见其受欢迎程度。②ProTools破兔子,混音届的标配宿主,专业录音棚必备!MIDI编曲常用的是软体音源,常见格式为VST,由宿主载入使用。

  • 论语雍也篇跟读经典(论语笔记第177讲美玉于斯)

    由做买卖又可引申为物价,读jià,这一意义后来写作“价”。在中国贾姓人的祖先可能就是商人出身。如《将进酒》中的“径须沽取对君酌。”将具体的事件提炼成普遍适用的理论问题。这种能力也是是做学问者必不可少的技能。诸,之乎的合音。《论语》的编者水平很高,一个“者”字,就对子贡问话里的两种不同含义进行了选择。两大高手交流,没谈隐居也没提出仕,孔子“待贾者”的心态表露无遗。

  • 瘟疫盛行的原因(是瘟疫频发还是坏习惯)

    蹊跷的是,父子二人均猝死。马援与马武、耿舒不和,人所共知,光武帝此举用意甚明。马援病死在前线,在马武、耿舒的谗言下,光武帝大怒,立刻取消了马援的新息侯爵位。光武帝去世后,在阴丽华坚决要求下,汉明帝立马贵人为皇后。东汉为何瘟疫多公元75年9月,汉明帝猝死,年仅48岁。汉明帝称夜梦金人,浑身放光,在宫殿上空飞行。许多贫民死后,无人收尸,引发疫病传播,此外当时处死犯人需“弃市”,不许收尸,也是一个传染源。

  • 温州娒近四年身男女生平均身高超全国平均水平

    2020年温州市中小学生各年段学生身高体重监测数据2020年温州各县(市、区)各年段学生身高体重监测数据这些数据都有哪些启示?温州学生身体发育趋势向好,男女生平均身高超过全省平均水平。2020年,我市高三年级(18岁)的男生、女生平均身高174.18cm、162.31cm,显示温州孩子身体发育的趋势良好。充分利用学生身体发育高峰期,助力他们健康成长。孩子青春期提前,家长老师要密切关注他们的心理健康。