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

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

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

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

    推荐阅读
  • 信阳电子社保卡亲情服务添加不了怎么办?

    电子社保卡亲情服务开通常见问题:1.提示社保卡状态异常怎么办?请查看您的亲人实体社保卡是否处于未激活、注销、挂失等非正常状态。只有正常状态下的实体社保卡才能够申领电子社保卡。新办理的社保卡可能会存在数据同步延迟,请您等待1-2天重新申请或到当地社保卡服务网点进行咨询。这表示您的亲人没有实体社保卡或实体社保卡的相关数据暂未同步到全国库中。

  • 祝老师新年快乐的句子(关于祝老师新年快乐的句子)

    祝老师新年快乐的句子?祝老师新年快乐的句子你的手笔,写下了很多真理;你的语言,教导了很多道理;你的日日付出,培养了很多优秀人才;老师,您辛苦了。新年到来,祝愿老师的事业蒸蒸日上,家庭和和美美,身体健健康康。没有华丽的语言,只有真诚的祝福,祝老师在新的一年里身体安康,天天开心!在教师节来临之际,想为恩师送上自己的祝福,祝您节日快乐!我最亲爱的老师,我想说一声:“老师您辛苦了。”

  • 飞机能带鸡蛋吗(飞机能带鸡蛋吗生的)

    但是,由于鸡蛋属于易碎品,机场建议市民尽量不要随身携带上机,最好打包好,按易碎品托运。

  • 婚纱摄影工作室排名如何(深度揭秘婚纱摄影工作室的真相)

    但是影楼为了追求稳定,每一个流程都有专门的规定,拍摄出的效果大同小异。由于是私人定制,不管是服装造型还是拍摄风格都是为顾客量身打造,工作室也是1对1进行服务,没有传统影楼1对多这样的安排。也就是说如果顾客感到拍摄效果不满意,或者是对摄影师及某个服务不满,那么是会影响到绩效考核的,员工会更重视服务。

  • 我国沙漠发现的奇观(沙漠中隐藏的神秘楼梯被发现)

    但卷轴上并没有文字,研究人员认为将其放在罐子中是为了准备书写。据说在这个城市有一个叫Ahaha的女人。更重要的是,洞穴壁画中描绘的仪式与科学家们目前所了解的在坦桑尼亚生活了数千年的古桑达韦人的传统并不一致。

  • 小说美女爱情故事(别墅豪车香艳美女)

    刘飞一大早就回去了,虽然杨燕妮这个地方很容易让人沉醉,别墅豪车香艳美女,然而他自有他的志向,不能因为一个女人而就此停止前进的步伐。刘飞憨厚的一笑,村支书却已经点燃了火给他点烟了。刘飞说出了自己的打算。刘飞很坚定的说道。刘飞又跟村支书握了手,转身要离去。刘飞笑了笑,便往村卫生室去了。

  • cor corporation

    coral10是华为荣耀Play。外观方面,荣耀Play的外观以圆润风格为主,整个机身采用一体化金属机身,指纹模块放置在机身背部。提供星云紫,极光蓝,幻夜黑三种基础配色,以及幻夜黑与魅焰红的酷玩版配色。配置方面,荣耀Play采用EMUI8.2操作系统,高性能的麒麟970+8核处理器。轻松驾驭大型3D游戏,尽享高帧率畅爽体验,搭载GPUTurbo技术,性能释放,带来持续稳定高帧率的游戏体验。上述就是关于coral10是华为什么型号的内容介绍了。

  • 有必要做产后骨盆修复吗(产后骨盆修复一定要做吗)

    修复骨盆有很多种方式,像现在市面上就有一些收腹带,髋骨仪等等,但是像收腹带,长期使用是很容易造成器官下垂的,而髋骨仪就更不用说了,以大力出奇迹的方式来收胯,明面上是小了不少,但是实际上会有加重骨盆错位和骨折的风险。髋骨仪修复现场骨盆修复一定是徒手的,只有辩证是什么错位方法,才能够对症调理,从而更有效,更安全的达到修复骨盆的效果。

  • 压岁钱什么时候给合适(压岁钱的意思)

    压岁钱最初的用意是镇恶驱邪。因为人们认为小孩容易受鬼祟的侵害,所以用压岁钱压祟驱邪,帮助小孩平安过年,祝愿小孩在新的一年健康吉利、平平安安。春节拜年时,长辈要将事先准备好的压岁钱放进红包分给晚辈,相传压岁钱可以压住邪祟,因为“岁”与“祟”谐音,晚辈得到压岁钱就可以平平安安度过一岁。压岁钱一般在新年倒计时时由长辈分给晚辈,表示压岁(压祟)。

  • 宁波象山旅游景点(宁波景点介绍)

    宁波象山旅游景点象山影视城是《琅琊榜》、《神雕侠侣》、《碧血剑》等热门古装剧的取景地。景区主要分为神雕侠侣城、春秋战国城,你可以在逼真的古装场景中看演出、玩互动、拍照片,回味古装剧中的经典场景,运气好还能偶遇明星。中国渔村位于石浦北侧,是一个十分成熟的度假海滩。城内保留着不少古朴的老宅,路边是出售海产的小店,还有14个展馆可了解当地文化。松兰山海滨度假区位于象山县城东南9公里的海滨。