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

用到的库

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快捷。下次再进行介绍吧!有兴趣的小伙伴可以自己看看!

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

时间: 2024-11-09 15:55:53

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

利用python Socket写一个类似FTP的脚本(只写了下载,上传和下载差不多就不多写了)

Socket的介绍就不多说了,网上都能搜到,直接说脚本,要实现FTP的功能要有服务器端和客户端, 服务器端: import SocketServer import commands import time class MySockServer(SocketServer.BaseRequestHandler):     def handle(self):         print "Got a new conn from", self.client_address         wh

python: 怎样写一个函数把名字大写并变成下面这样——字典与三引号

例题:python: 怎样写一个函数把名字大写并变成下面这样? 字典+列表:将每个字母以列表形式存在字典里,分六次打印输出: dic = { } dic['C']=[ ' CCCC ', ' C C', 'C ', 'C ', ' C C', ' CCCC ' ] dic['A']=[ ' A ', ' A A ', ' A A ', ' AAAAAAA ', ' A A ', 'A A' ] dic['T']=[ 'TTTTTTT', ' T ', ' T ', ' T ', ' T ', '

Android高级控件(五)——如何打造一个企业级应用对话列表,以QQ,微信为例

Android高级控件(五)--如何打造一个企业级应用对话列表,以QQ,微信为例 看标题这么高大上,实际上,还是运用我么拿到listview去扩展,我们讲什么呢,就是研究一下QQ,微信的这种对话列表,我们先看一个传统的ListView是怎么样的,我们做一个通讯录吧,通讯录的组成就是一个头像,一个名字,一个电话号码,一个点击拨打的按钮,既然这样,那我们的item就出来了 call_list_item.xml <?xml version="1.0" encoding="ut

Python+Django写一个本机性能监控应用?

说起自动化运维离不开监控软件,那我们就用一点时间来写一个主机性能监控系统吧,Python+Django使用HighChart.js可以很快实现性能监控的功能: 以下为监控视图效果.本机总内存8G,内存占用一直比较稳定在55%~58%之间,所以图形曲线非常平缓~. CPU使用率监控视图,CPU使用率波动频繁,所以效果很好: 最后贴上任务管理器中的监控对比一下.

ruby利用Zip Gem写一个简单的压缩和解压的小工具

在UNIX下的我们怎么会沦落到用ruby写压缩和解压工具呢?直接上shell啊!但是请允许本猫这次可耻的用ruby来玩玩吧!其实ruby GEM中有很多压缩解压包,我选的是Zip,也许是因为名字符合KISS原则吧!不过在编写中发现Zip中的某些类没有文档中所说明的实例方法,也许在某个平台上还未实现?? 话先说到前头,这个工具如果解压有重名文件的情况会直接覆盖原文件而不会有任何提示!测试时务必注意,如果造成一些文件丢失可别怪本猫啊! 代码也考虑到多文件的情况,如果是压缩多文件则默认会单独压缩每一个

40行python代码写一个桌面翻译器

大多数有抱负的数据科学家是通过学习为开发人员开设的编程课程开始认识 python 的,他们也开始解决类似 leetcode 网站上的 python 编程难题.他们认为在开始使用 python 分析数据之前,必须熟悉编程概念. 资深数据分析师 Manu Jeevan 认为,这是一个巨大的错误,因为数据科学家使用 python 来对数据进行检索.清洗.可视化和构建模型,而不是开发软件应用程序.实际上,为了完成这些任务,你必须将大部分时间集中在学习 python 中的模块和库上. 请按照下面这个步骤来

如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化

---恢复内容开始--- 2.之后你可能还需要一些字体,如simhei.ttf等,这些字体在网上都有,可以直接进行下载,在做词云的时候会用得到,如下图所示. 这个地方需要注意一下,由于我们的memoent.json文件中是中文字符,如果在open()函数中没有加入encoding='utf-8'的话会导致gbk编码错误,记得将编码加上即可. 4.之后运行程序,得到keys.png图片文件,程序运行的效果如下图所示.可以看到keys.png已经在items.py目录下了. 5.双击keys.png

利用python+tkinter做一个简单的智能电视遥控器

要通过python实现遥控器功能分两步: 第一步:开发图形化界面 第二步:使PC端给电视发送相应指令 现在就开始第一步操作实现遥控器功能,python2输入以下代码 注意:python3需要将代码中的from Tkinter import * 替换为from tkinter import * 将from SimpleDialog import * 替换为import tkinter.simpledialog #coding=utf-8from Tkinter import * from Simp

项目实战_Python.利用Python+Flask编写一个高性能实时主动监控平台?

项目简介: 说明: 主要用于Redis实例集中化实时主动监控,后端采用Python+Flask实现,具体实现代码请阅读代码 项目思路: 项目结构: xmzoomeye-redis ├── app │   ├── conf │   │   ├── config.py │   │   ├── config.pyc │   │   ├── __init__.py │   │   ├── __init__.pyc │   │   └── rdsdata.db │   ├── __init__.py │