专栏名称: Python学习交流
每天更新,更新python相关的知识。希望诸君有所收获!
目录
相关文章推荐
Python爱好者社区  ·  英伟达憾失DeepSeek关键人才?美国放走 ... ·  昨天  
Python爱好者社区  ·  DeepSeek创始人梁文锋个人履历 ·  3 天前  
Python爱好者社区  ·  离谱!下载DeepSeek最高判刑20年? ·  2 天前  
Python爱好者社区  ·  多模态,杀疯了 ·  2 天前  
Python开发者  ·  请立即拿下软考证书(政策风口) ·  4 天前  
51好读  ›  专栏  ›  Python学习交流

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

Python学习交流  · 公众号  · Python  · 2018-08-06 20:00

正文


用到的库

socket库

私信小编007即可获取数十套PDF哦!

先看代码!

TCP服务端


TCP客户端



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

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

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


3

网络通讯底层逻辑

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

通讯协议可以分为两种:

①TCP协议



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







请到「今天看啥」查看全文