码迷,mamicode.com
首页 > 微信 > 详细

利用Python来写一个聊天工具!可能下个QQ或者微信会是你开发的?

时间:2018-08-09 11:01:01      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:交流   soc   字节   接收   小伙伴   class   说话   处理   stat   

技术分享图片

 

用到的库

socket库

进群:548377875 即可获取数十套PDF哦!

先看代码!

TCP服务端

技术分享图片

 

TCP客户端

技术分享图片

 

技术分享图片

 

‘电话’接通后对方就会开始‘说话‘(发送了消息),接收消息了recv是接收信息,1024这里需要解释一下,是接收的最大字节(接收到的内容为二进制)。但是细心的读者可能发现了,用send发送的时候并没有设置发送的字节,其实可以更大,最大不要超过8K就可以了。下面解释这个怎么用才能更好。

接收消息了还需要发送信息。发送信息只需要用send就可以发了,但是需要发送二进制的内容。

另外一点要说的是while True的作用,假如有人给我们打电话,那么朋友不会只说一句‘你好!‘,然后你说‘你好’就挂电话吧,所以需要循环接收和发送。

技术分享图片

 

3

网络通讯底层逻辑

这里我想我可以详细讲解一下底层逻辑,因为这可以帮助我们在出现问题的时候可以更快的找到处理方法。

通讯协议可以分为两种:

①TCP协议

技术分享图片

 

技术分享图片

 

类似这样。每个send是进行两个操作,将东西放在自己的内存里,然后传输过去。而接收只在自己的内存里面拿东西,而发送端发送的内容如果很大会怎么办呢,接收端限制了大小,会出现‘粘包’的现象,就是说自己的内存里面还有多余的东西没有拿完。如果这个时候接收端继续接收信息的话,会从内存中取出上次没有取完的,打个比方,我两个桶中间有个很大的盆(内存)做过度,我这边发送端把水(信息)先用管子(TCP)导入到你的盆里面,但是你接受的时候只倒了一半的水走,还有一半就留在了盆里,下次再有水导过来的时候,会首先将之前的水倒到桶里,然后再看有没有接收新的水的内存来接收新的内存。

技术分享图片

 

技术分享图片

 

发送端

技术分享图片

 

这是一种简单的处理方式,就是先告诉接收端要接收多少东西,然后再传入

②UDP协议

UDP (User Datagram Protocol),是OSI(Open System Interconnection,开放式系统互联) 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。

这个相对TCP来说相对简单些,无需用户先连接再发送信息,而是用sendto(‘二进制信息‘,(ip,port))来传输信息,UDP是可以直接多用户同时进行交流。个人觉得这个协议没有TCP快捷。下次再进行介绍吧!有兴趣的小伙伴可以自己看看!

利用Python来写一个聊天工具!可能下个QQ或者微信会是你开发的?

标签:交流   soc   字节   接收   小伙伴   class   说话   处理   stat   

原文地址:https://www.cnblogs.com/Python1314/p/9447325.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!