肥宅钓鱼网
当前位置: 首页 钓鱼百科

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

时间:2023-07-11 作者: 小编 阅读量: 4 栏目名: 钓鱼百科

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下载成功!!!

    推荐阅读
  • 陆游咏梅诗多少首(陆游的这首诗仅仅四句)

    《梅花绝句·其一》是陆游退居故乡山阴时创作的一首七言绝句。陆游爱梅,一生更是写下百余首有关梅花的诗,这首诗是其中别开生面的一首。主要通过对梅花绽放的情景描写,以及运用超凡脱俗的表达技巧,将陆游的爱梅之情表达的淋漓尽致。这句诗主要是通过对梅花生长环境恶劣的描写,突出陆游对梅花不畏严寒、傲对风雪的气节的赞美。综观陆游的这首诗,陆游以奇特的想象与形象的语言,表达了对梅花的挚爱。

  • 小学生无土栽培芽苗菜(家庭芽苗菜纯绿色无公害)

    但是目前市场上的芽苗菜由于利益驱动,多是使用激素、无根素、赤霉素或尿素浸泡催生的,这些方法生产的芽苗菜生长快、看相好、产量高,但是产品不够安全,并不符合绿色无公害蔬菜的生产标准。当吸足水后,捞出,冲洗干净。一定要撒播均匀,使形成均匀的一层,不要有堆积现象。每次淋水量以使芽体全部淋湿同时基质也湿透为度,但不能使栽培容器底部有积水。

  • 忽地笑怎么养(养护忽地笑技巧)

    忽地笑怎么养忽地笑的适应性很强,喜欢在阴湿的环境中生长,比较耐寒、耐盐碱,最好选择含有丰富腐殖质的肥沃沙壤土或者石灰质壤土。忽地笑不耐旱,怕水涝和阳光暴晒,光照过强时会导致植株不开花,最适合的生长温度为22-30度,平时种植时放置在散光通风处即可。忽地笑的日常管理要注意保持土壤湿润,在夏季开花前要是遇到比较干旱的天气,需要连续浇两到三次的水;在植株的休眠期时,要逐步减少浇水的量。

  • 吃花生毛豆爱胖吗(花生香香哒吃多了会胖吗)

    不可否认的是,花生的产热量的确高于肉类,比牛奶高20%,比鸡蛋高40%。但花生对肥胖的威胁并不大,如果适量食用,吃花生米不但不会变胖,还能起到减肥的功效。所以,爱美的你不必担心平时适量“多吃花生会胖吗”的问题了。减肥主要是保证一天热量的收支平衡。因此,适当吃花生不会发胖,只要注意一个度,都是没问题的。

  • 行测言语500个高频成语(公考最新高频成语大放送)

    如早晨的时候,太阳从东方出来,到黄昏的时候,太阳便在西方落下,这样便不能说“司空见惯”。这样的事情,我们看多了,则用“司空见惯”四字便恰当了。一蹴而就608国-36;11国-37;12国-26;17国-21;12秋-20;17春云-32蹴:踏。后来用“大相径庭”表示彼此相差很远或矛盾很大。多用于表示对人钦佩的自谦语。后指提出新奇的主张显示与众不同。昭然若揭415国-39;16春-33;17春云-37;17春河-25昭然:明显、显著的样子。

  • c证开货车需要货运资格证吗 c证开货车需要从业资格证吗

    公安机关交通管理部门以外的任何单位或者个人不得发放机动车号牌或者要求机动车悬挂其他号牌,本法另有规定的除外。机动车登记证书、号牌、行驶证的式样由国务院公安部门规定并监制。第十二条有下列情形之一的,应当办理相应的登记:机动车所有权发生转移的;机动车登记内容变更的;机动车用作抵押的;机动车报废的。

  • 孕期长痘痘怎么办(孕期长痘痘的方法)

    孕期长痘痘怎么办怀孕期间由于体内的内分泌失调或者是因为激素水平增多,导致有的女性脸上会长痘痘,这个时候可以吃些粗纤维的食品或者水果和绿色的蔬菜,它们不仅可以起到补水的作用,还有一些可以具有锁水的功效,进行体内的调节。在饮食上要注意,要少吃辛辣的、油腻的,容易上火的食物,因为这些食品吃了以后会更加容易长痘痘。

  • 方佳测评分数102分

    文章目录:一、方佳相关名字打分98二、方佳相关名字评分105三、方佳相关名字推荐四、方佳相关名字大全五、其他人还看了一、方佳相关名字打分98方堃方最方脑壳方兴方联民方侃方莹玉方龙方南江方岩镇方俊锡方爱华方小波方维夏方菁菁方旭辉方世荣方加奇方点方龙香方笔画方培君方维规方明亮方远辉方长顾方婷婷方国营方章荣方锅盔方红生方瑶莹方纸桶方旭东方飞方洪波方思瑶方爱之方庆云方君瑛方小雄方丹方璐方春华方路方帽子方泉

  • 缓解瞌睡的方法(有什么可以缓解瞌睡的小妙招)

    可以把嘴巴张大一点在打哈欠,这样可以吸入更多的氧气,从而让大脑处于活跃状态,另外也可以通过做深呼吸的方式对大脑提供充足的氧气血液。倒着走100步:长时间在办公室里坐着,容易出现腰酸背痛的情况。工作一个小时应该站起来倒着走100步,不仅仅能够促进血液循环,同时也可以缓解颈肩背部的疲劳感,快速赶走打瞌睡的情况。另外也可以通过做头颈部左右环绕的小动作来让全身得到放松,缓解其压力。

  • excel成绩表横向的怎么排序(成绩进退步情况一键显示)

    今天跟大家分享一张EXCEL全自动成绩表,学生成绩进退步情况一键显示,排名显示一键操作。メメ单科,全科成绩低于平均分的成绩,条件格式自动红色字体。メメ排名统计,下拉菜单选择科目,函数自动显示结果。メメ将考试成绩排名直接复制到第一次,第二次考试工作表,进步退步情况函数自动显示。メメ单元格设置数据条,差异显示一目了然,成绩管理不劳心,赶紧GET住。帮帮将每天定时更新各种模板素材,获取方式。