python网络编程(UDP/TCP)

版权声明:一个苦逼初学者的原创小博客。 https://blog.csdn.net/SenZendao/article/details/81878063

这几天台风来了,所以没有更新博客(强行理由,虽然台风没有影响到我。。)有点慌张,满满的负罪感,本来打算一天一更,但是我决定偶尔给自己放个假,要不每天晚上2个小时就没有了。。。

今天我呢来总结一下网络编程吧,至于什么是网络,为什么要有网络,大家可以去百度百度,说的肯定比我详细,所以我在这就不给大家说了。

这里写图片描述
(但是我还是忍不住发一张我们90后的怀念吧,可能有很多85后也有过这段记忆,还记得小时候还是我姨给我了一台小霸王游戏机,天天都是玩一些超级玛丽,魂斗罗,坦克大战,最幸福的事就是有个小伙伴陪你一起双人游戏,但是这些都是单机游戏,上了小学以后慢慢接触到网游,然后就接触到了梦幻西游,真是入坑容易出坑难,直到现在还是会忍不住去买一个号,然后玩一段时间再卖了,然后又忍不住买,现在20多了,反正都是情怀吧,也算是有一个比较幸福的童年吧,跑偏了。。。)

不要求你把知识点熟记于心吧,但是你也得知道什么是:tcp/ip协议,什么是端口,什么是ip,什么是子网掩码吧。

其实这个东西代码量很小,都是体力活,(前提是你得有一定的理论知识,要不你看懂代码了不理解并没有什么用)

什么是UDP(C/S模式)

UDP — 用户数据报协议,是一个无连接的简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制,故而传输速度很快。
UDP是一种面向无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。

UDP的特点

UDP是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。 UDP传输数据时有大小限制,每个被传输的数据报必须限定在64KB之内。 UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。

UDP注重速度流畅

UDP操作简单,而且仅需要较少的监护,因此通常用于局域网高可靠性的分散系统中client/server应用程序。例如视频会议系统,并不要求音频视频数据绝对的正确,只要保证连贯性就可以了,这种情况下显然使用UDP会更合理一些。

还是那句话,Python很强大,功能都给我们写好了,我们直接拿来用就好了。这就要用到socket函数了。

给大家说一下Pytnon中的常量,只要是全部大写的就是常量而且都有一个固定的值:比如这样的

这里写图片描述
他们都有一个固定的值,都是常量。

给大家看一下UDP的流程图这里写图片描述

重在理解,代码很少,下面我们就来写写代码,这里要用到一个辅助软件,网络调试助手,大家可以在网上下载,然后用来进行调试。
这里写图片描述
这是一个发送数据,下面写一个接收数据的
这里写图片描述

这样就完成了UDP的发送和接收,当然也可以把收发写到一起,在这里我就不写了,大家应该很容易实现的,在下面TCP的演示中,我会把收发写到一起。

TCP(B/S模式)

tcp通信模型中,在通信开始之前,一定要先建立相关的链接,才能发送数据,类似于生活中,”打电话”

TCP的流程图

这里写图片描述

TCP分为客户端和服务器,一般在开发过程中我们只研究服务器。

废话不多说,先写个客户端的代码

tcp的客户端要比服务器端简单很多,如果说服务器端是需要自己买手机、查手机卡、设置铃声、等待别人打电话流程的话,那么客户端就只需要找一个电话亭,拿起电话拨打即可,流程要少很多。(网络调试助手模拟服务器)

这里写图片描述
这样一个简单的TCP客户端就写好了。下面我们来写服务端吧,这次直接写一个比较完整的服务器吧
这里写图片描述
这里写图片描述
这个代码稍微复杂一点,但是大家应该看的明白,写的时候忘了注释了。。。
使用socket创建的套接字默认的属性是主动的,使用listen将其变为被动的,这样就可以接收别人的链接了
tcp_socket.listen() Linux系统()内是不需要填参数的,系统可以帮你自动识别最大连接数,Windows就要填参数了,直接填数字就可以

* 如果有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务器:tcp_client用来为这个客户端服务*
client_address就可以省下来专门等待其他新客户端的链接
tcp_client, client_address= tcpSerSocket.accept()
就写这两句的注释吧,别的代码应该没大问题。

代码基本就这样,剩下的就是理论知识需要理解的,什么三次握手,四次挥手,十种状态,长连接和短连接。大家搜搜论坛,百度就知道了,这东西我没法写,写出来就太多了,所以大家理解理解。

今天就到这里吧,像那种python的基础语法,我整理的都有,但是我觉得没必要上传了,因为列表,元组,字典这种东西都相对于比较简单吧,我准备随后整理整理闭包,迭代器,生成器,和装饰器。

生活不止眼前的苟且,还有明天的苟且,后天的,大后天的。。。生活很难,不努力更难。我们不要轻易用努力来粉饰无能的自己,所以干就是了!

猜你喜欢

转载自blog.csdn.net/SenZendao/article/details/81878063