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

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

    推荐阅读
  • 电脑下面的任务栏怎么隐藏(电脑下面的任务栏如何隐藏)

    以下内容大家不妨参考一二希望能帮到您!电脑下面的任务栏怎么隐藏工具/原料:电脑:windows10打开电脑桌面的“开始”,选择“设置”。进入设置页面后,找到“个性化”并单击。将“在桌面模式下自动隐藏任务栏”和“在平板模式下自动隐藏任务栏”打开即可。

  • 西平到漯河西站的公交(西平县城到漯河高铁站公交最新试运营时间表出炉)

    以下内容大家不妨参考一二希望能帮到您!西平到漯河西站的公交天中晚报讯全媒体记者王冬霞为方便西平、漯河两地群众绿色出行,改变西平至漯河高铁西站不通公交的历史,西平宏业公交公司、漯河宏运集团公司联合于2020年1月1日开通西平至漯河高铁西站城际公交。从2020年1月1日至2月9日在试运营期间,从西平至漯河高铁西站双向乘车的旅客都可以免费乘坐。

  • 吊带裙穿搭夏天(这三种搭配让你美出新高度)

    吊带裙穿搭夏天白色吊带裙+碎花小西装这款白色吊带裙比较有设计感,上面有很多的褶皱,虽然褶皱很多,但是非常有层次感。上面还有很多层布料,蓬蓬的特别像公主裙。外边搭配碎花的小西装,要知道碎花是今年非常流行的元素,这样搭配在一起又有个性又时髦。那是对于身材不自信的,可以在外面搭配,雾霾蓝的格子小西装。瞬间增加了层次感,也成为了这一身的亮点。

  • 驾驶证满六年换证流程(驾驶证怎么换证)

    以下内容大家不妨参考一二希望能帮到您!驾驶证满六年换证流程当第一次领取驾驶证满6年后,在6年的有效期内,每个记分周期均未记满12分的,换发十年有效期的机动车驾驶证。驾驶人按照正常的换领的步骤,到医院进行体检,携带申请表、身份证、驾驶证到车管所办理。

  • 钟馗是谁(钟馗是什么人)

    钟馗是谁钟馗,道教俗神,专司打鬼驱邪。中国民间常挂钟馗神像辟邪除灾,从古至今都流传着“钟馗捉鬼”的典故传说。关于钟馗为终南人之说,在各种古书典籍中均有记载。唐武德年间,赴京城应试,却因相貌丑陋而落选,愤而撞死殿阶。大汉声称自己为“殿试不中进士,钟馗”,皇帝梦醒,即刻病愈。于是,唐玄宗命吴道子将梦中钟馗捉鬼情景作成一幅画,悬于宫中以避邪镇妖。

  • 英语语言历史发展(英语言简史)

    而盎格鲁萨克逊人,是日耳曼人中很凶残好战的一支。到了莎士比亚那个年代,英格兰基本上就是盎格鲁萨克逊蛮族和维京海盗两个强悍蛮族的组合体。新的混合体快快诞生,萨克逊人和丹麦人的后代。英语现在是几乎所有国际组织的官方语言,比如东南亚联盟、北约、世界银行、国际货币基金组织。甚至成员国都不是以英语为母语的组织也经常使用英语,比如欧洲自由贸易协会等。

  • 正确给佛像开光方法(什么是开光)

    跟着小编一起来看一看吧!开光是一个宗教用语,简单来说就是让一件具体的物品附着上佛的法力,是用来避邪的。一般来说,越有名的寺庙、越得道的高僧开光后的东西越灵。信徒有了这颗敬仰的心,修炼的时候,佛像上的法力就为他护法,起到保佑的作用。可以用来开光的物品有很多,佛像、玉器、经书之类。

  • 白云苍狗讲了什么故事(白云苍狗的意思)

    接下来我们就一起去研究一下吧!白云苍狗讲了什么故事成语故事:唐朝书生王季友的妻子柳氏不堪家境贫寒,抛弃了丈夫而去,外界不明真相,纷纷指责王季友。杜甫为王季友鸣不平,特作《可叹》诗一首:“天上浮云似白衣,斯须改变如苍狗。”感叹世事变化莫测。唐·杜甫《可叹》解释:苍:灰白色。浮云象白衣裳,顷刻又变得象苍狗。比喻事物变化不定。

  • 如何做鱼汤好吃又简单(最家常的鱼汤做法)

    下面更多详细答案一起来看看吧!如何做鱼汤好吃又简单把鲤鱼洗净,晾干。鲤鱼不要切得太小,否则烧的过程中容易散开。鱼块用料酒,盐和黑胡椒腌制,加入生姜片。烧沸水,用水汌烫,鱼肉颜色变白以后就可以捞出了。起油锅,油烧热以后倒入番茄酱,加糖和盐调味,烧到有一点浓稠以后把鱼块倒入。略微翻炒一下加大蒜碎,鸡精就可以出锅食用了。

  • 45岁绝经能做试管婴儿吗(还能生育吗)

    下面内容希望能帮助到你,我们来一起看看吧!45岁绝经能做试管婴儿吗绝经是通常概念上的统称,但是每个人的类型是不同的,绝经也分不同的情况,有的女性绝经后也可以尝试试管婴儿。单独切除子宫而保留卵巢者,也可能出现绝经情况,但卵巢功能正常,这类女性可以采取试管婴儿促排卵,加上辅助生殖技术,以达到生育的目的。