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

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

    推荐阅读
  • 滴滴平台抽成比例出来了(滴滴出行真的是抽成过高吗)

    另外,滴滴表示,针对更多司机的问题,他们于2021年4月21日成立了滴滴司机委员会,委员会成立后收到了2000多条司机师傅的实名问题反馈和意见。滴滴会针对司机们的问题进一步改进和优化平台的抽成制度,以提高司机师傅的满意度。但是无论是怎样的抽成机制,首先要做到让司机知情,而不知情所带来的猜忌和怀疑确实能让滴滴司机们内心产生不平衡。当然,那些不明原因的过高抽成单还需要滴滴平台不断完善计算机制。

  • 祝你幸福是什么意思(祝你幸福是啥意思)

    祝你幸福是希望你未来幸福这世界上最叫人摸不着头脑,最叫人难猜的就是爱爱的方式有很多种,有的相濡以沫,相知相守,有的轰轰烈烈,经历生死,有的平平淡淡,相守一生,有的吵吵闹闹,欢声笑语还有的只见他人欢乐,自己默默守候但是有一种真爱,叫“祝你幸福”,今天小编就来说说关于祝你幸福是什么意思?下面更多详细答案一起来看看吧!祝你幸福是什么意思祝你幸福是希望你未来幸福。但是有一种真爱,叫“祝你幸福”。

  • 腐竹的最新做法大全(腐竹竟然有这么多美味的做法)

    腐竹竟然有这么多美味的做法腐竹一种汉族传统豆制食品,也是常见的食材,具有浓郁的豆香味,同时还有着其他豆制品所不具备的独特口感腐竹色泽黄白,油光透亮,含有丰富的蛋白质及多种营养成分,所以无论是自己家还是在饭店的餐桌上,都经常能看。

  • 百世师的意思解释(百世师是什么意思)

    以下内容大家不妨参考一二希望能帮到您!百世师的意思解释百世师:指人的品德学问可以做后世百代人的表率。《孟子·尽心下》:“圣人,百世之师也。”匹夫而为百世师,一言而为天下法。

  • 定频空调的优点有哪些(红极一时的定频空调)

    一家独大的“变频空调”几乎占领了空调市场的九成以上。各大品牌的一级变频空调,价格基本在3000元左右,甚至更高。而除了省电的优势外,其实变频空调的出风也相对舒适,所以进一步让消费者对其产生了好感。抛开省电和舒适这2点优势之外,不少人对于变频空调的劣势更是耿耿于怀。不可否认的是,变频空调,是真的贵。

  • 网络游戏被骗6万元(男子网上售卖游戏账号被骗千元)

    民警对这一男子的“神操作”啼笑皆非。徐州市睢宁县公安局睢河派出所民警李恒:张某称其在网上查询时得知,诈骗案件需要2000元警方才能予以立案,但他在这个平台上只被骗了1000元,觉得公安机关不会予以立案,所以又向对方转账了1000元,随后才报的警。经民警分析调查,张某接触的所谓买主与平台客服人员属于一个诈骗团伙,所谓的“交易猫”交易平台是犯罪团伙的诈骗工具。目前,该起案件还在调查中。

  • 五十三不亲是哪三亲(胡说八道是哪八道)

    胡,中国古代对西、北部少数民族的称呼。恶逆,指殴打和谋杀祖父母、父母、伯叔等尊长。大不敬,偷盗皇帝祭祀的器具和皇帝的日常用品,伪造御用药品以误犯食禁。不睦,指谋杀某些亲属,或夫妻间殴打、控告等。不义,指殴打、杀死长官,丈夫死后不举哀并作乐改嫁等。内乱,指亲属之间通奸或强奸。

  • 形容幸福爱情句子(描写爱情很幸福的唯美句子)

    以下内容大家不妨参考一二希望能帮到您!最幸福的开始不是爱情,而是繁华以后不离不弃。给你的情书只有三行,剩下的浪漫,我用一生来补偿。我已经好久没这样喜欢一个人了,就是想到你就会笑的那种。人生至福,就是确信有人爱你,有人为你的现状而爱你。其实你根本就不是我喜欢的类型,只是碰巧撞进了我的心。一辈子多长我不知道,缘份有多少没人知晓,这条路有多远并不重要,只要我们的心依靠,再远也不觉得路遥。

  • 丁嘉丽与女儿演过什么(霞光中隐藏着一对明星母女)

    霞光中隐藏着一对明星母女她来了,她来了,佟丽娅带着“海蛎子味”向我们走来了!毛卫宁执导、佟丽娅领衔的谍战剧《霞光》在央视八套播出后,取得了不错的收视成绩主演佟丽娅一口的大连话,有没有给你带来耳目一新的观剧感受呢?有观众也许会。

  • 发芽的火龙果籽怎么养(火龙果吃完不要扔)

    火龙果吃完不要扔,只需一粒“籽”,养成盆栽,半年有惊喜!然后我们取出卫生纸,把火龙果种子上面的水分吸干,静置一段时间,等它完全干透!干透之后,我们把火龙果的种子,均匀地撒在提前准备好的,微微湿润的培养土,然后再用小喷壶喷一层水,用保鲜膜盖上,用来保证空气的湿度!