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

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、软件支持安卓和苹果系统;2、安卓支持微信和QQ,苹果不支持QQ;3、自带语音包,使用简单;4、永久包更新,适配最新微信版本兼容性。

  • 酒驾扣多少分 醉驾扣多少分

    机动车驾驶人在一个记分周期内累积记分达到12分的,公安机关交通管理部门应当扣留其机动车驾驶证。拒不参加学习,也不接受考试的,由公安机关交通管理部门公告其机动车驾驶证停止使用。饮酒后驾驶机动车的,处暂扣六个月机动车驾驶证,并处一千元以上二千元以下罚款。驾驶人在规定时间内未办理降级换证业务的,车辆管理所应当公告注销的准驾车型驾驶资格作废。

  • 为免费吃日本寿司改名鲑鱼 台湾鲑鱼寿司改名

    当初消息一出还被消费者吐槽:“谁会真的叫鲑鱼?”不料至少上百位消费者因此改名,就为了免费吃寿司,且多是20岁出头的年轻人,引起一阵“鲑鱼之乱”。台湾新北市户政事务机构统计,至17日下午4时许,有26位新北市民改名为“鲑鱼”,其中23位男性、3名女性。

  • 微信自动扣费被停了怎么才能恢复(信自动扣费被停了如何怎么才能恢复)

    微信自动扣费被停了怎么才能恢复?跟着小编一起来看一看吧!微信自动扣费被停了怎么才能恢复首先在手机中打开微信,然后进入微信「钱包」,然后再点点击右上角的三个的菜单图标,然后在底部弹出的更多菜单中,点击进入「支付管理」。接下来在「支付管理」点击进入「自动扣费」设置,在「已签约项目」里,就可以看到自己绑定的自动扣费项目,将其签约或者开启自动支付功能,今后就可以自动扣费了。

  • 配电箱系统图中pz是什么意思(配电箱系统图中pe)

    配电箱系统图中pe​配电箱相信大家都非常的熟悉,我们离不开电,电是我们日常家居生活中最重要的设备产品,我们几乎每天都要用电,如今对电已经形成了依赖,就像中了毒一样,戒也戒不掉,下面小编就简单讲下配电箱系统图识读一、配电。

  • 奏的组词(奏怎么组词)

    下面更多详细答案一起来看看吧!奏的组词鸾鸣凤奏:弹奏演唱的美称。京剧唱腔伴奏以主奏乐器京胡为主,采用满腔满跟的伴奏方式。即伴奏基本上和歌唱曲调一致,其间还可以有多种装饰音或高低八度的翻奏。通常写于音符之上,用以注明从该音起的乐句或段落,用弹拨乐器来演奏。有时用横虚线注明其范围。

  • vivo账号忘了怎么退出登录(登录失败只因VIVO帐号忘记)

    手机行业一直流传一句话就是“讲究登录快的产品”,确实如果一款手机在开机登录的过程都会很慢很慢,这说明什么?所以性能很重要,但是登录速度也是需要占据一部分的,而重要性可算比较上得了台面的问题。问题描述而就在最近,教主在论坛看到一些人都在聊一些手机登录的问题,其中有个数码爱好者发帖询问“VIVO帐号身份忘记,导致无法使用,怎么解决?”网友互动手机账户不记得,你会?

  • 智能家居无网能使用吗(智能家居能在没网的时候使用吗)

    更因为疫情的原因,大家待在家里的时间越来越久,所以对于智能家居的关注度逐渐提高。还有一种叫做SA的智慧中心,这个设备呢是通过远程无线和局域网的共同点,部署了SA智慧中心后,我们的智能家居设备就会在部署范围内执行本地交互,类似局域网的私有控制范围。

  • 修正液有毒吗(修正液对人体的危害)

    修正液有毒吗含有多种有害物质,虽然现在很多在包装上标明使用的溶剂是甲基环己烷,但是并不能保证其中没有带入苯等物质。长期接触苯含量超标的涂改液,苯会通过呼吸、皮肤等渠道进入人体,对呼吸道、肝脏等造成损害,而且甲基环己烷本身也对人体有伤害。还可能带有铅、钡等重金属,长期使用易在人体内堆积,其危害不可小视。如果长期接触含苯化合物的化工产品,很可能会引发再生障碍性贫血,甚至导致白血病。

  • 自制苹果酒的正确方法(有哪些步骤)

    自制苹果酒的正确方法原料:在果实充分成熟、含糖量最高时采收。也可利用残次果酿制苹果蒸馏酒。出汁率一般为56~60%。如果迟迟不出现这样现象,可能因果汁中酵母菌过少或空气不足,或温度偏低,应及时添加发酵旺盛的果汁,或转缸,或适当加温。配制:苹果果实糖度一般不超过15度,因此只能制9度以下果酒,而普通果酒只有在酒度达14~16度才容易保藏。