Python通过Socket实现QQ聊天功能@TOC

服务器端代码tcp_server_chat.py

#/usr/bin/python3
import socket
import threading
import chatif __name__ == '__main__':# 初始化socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定IP地址和端口server.bind(("localhost", 8888))# 设置最大监听数server.listen(5)# 设置一个字典,用来保存每一个客户端的连接 和 身份信息socket_mapping = {}# 开启准备等待获取客户端的链接while True:sc, addr = server.accept()# 为每一个客户端开启一个线程、保证程序的高效运行threading.Thread(target=chat.server_chat, args=(sc, socket_mapping)).start()

客户端代码tcp_client_chat.py

#/usr/bin/python3
import socket
import threading
import chatclass QQClient:"""QQ Client"""def __init__(self, qq):"""初始化QQ号、并建立链接:param qq:"""self.qq = qq# 创建 socket 客户端self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器self.client.connect(("localhost", 8888))# 发送自己的身份,给服务器self.client.send(self.qq.encode())def chat(self, to_qq):"""和谁聊天:param to_qq::return:"""# 开启两个线程、分别进行接收(读取)数据、和发送(写入)数据threading.Thread(target=chat.read_chat, args=(self.client,)).start()threading.Thread(target=chat.write_chat, args=(self.client, to_qq)).start()

chat.py

#/usr/bin/python3
def read_chat(socket):  # 谁发送的、发送的内容"""读取别人发送过来的数据:param socket::return:"""while True:try:msg = socket.recv(1024).decode()# 将接收到的信息、打印到控制台上print(msg)except ConnectionResetError:print("服务器连接失败、请重新连接~")breakdef write_chat(socket, to_qq):  # 谁发的、发给谁的、内容"""发送信息给to_qq:param socket::param to_qq::return:"""while True:msg = input()# 准备发送给服务器的内容msg = f"{to_qq}:{msg}"# 将信息发送给服务器try:socket.send(msg.encode())except ConnectionResetError:print("服务器连接失败、请重新连接~")breakdef server_chat(socket, socket_mapping):"""服务器处理数据、并实现两个客户端的交互:param socket::param socket_mapping::return:"""# 接收客户端的身份、并进行存储qq = socket.recv(1024).decode()# 存储身份(这里也可以实现不允许同一账户多次登录)socket_mapping[qq] = socket# 给所有socket 显示 该用户上线了for k, v in socket_mapping.items():v.send(f"【{qq}】上线了".encode())# 开启循环、用来不断的进行转发数据while True:try:# 接收客户端发送的信息data = socket.recv(1024).decode()to_qq, msg = data.split(":", 1)# 将信息转发给 to_qq 对应的客户端to_socket = socket_mapping[to_qq]# 将信息发送给 to_socketto_socket.send(f"{qq}:{msg}".encode())except ConnectionResetError:# 该客户端离线了socket_mapping.pop(qq)# 提示所有的客户端、该用户下线了for k, v in socket_mapping.items():v.send(f"【{qq}】下线了".encode())# 退出循环breakexcept KeyError:# 该用户不在线、提示fqq,您的好友不在线socket.send(f"您的好友【{to_qq}】不在线".encode())

测试代码

//  client1
#/usr/bin/python3
from tcp_client_chat import QQClient
if __name__ == '__main__':# 登录QQ、并和服务器建立连接、模拟登录qq = QQClient("13523456")# 开启聊天qq.chat("472759903")// client2
from tcp_client_chat import QQClient
if __name__ == '__main__':# 登录QQ、并和服务器建立连接、模拟登录qq = QQClient("472759903")# 开启聊天qq.chat("13523456")

Python通过Socket实现QQ聊天功能相关推荐

  1. python软件代码示例-用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  2. 基于 WebSocket、Spring Boot 教你实现“QQ聊天功能”的底层简易demo

    目录 前言 一.分析 1.1.qq聊天功能分析 1.2.WebSocket介绍 1.2.1.什么是消息推送呢? 1.2.2.原理解析 1.2.3.报文格式 二.简易demo 2.1.后端实现 2.1. ...

  3. 能不能用python开发qq_用Python写一个模拟qq聊天小程序的代码实例

    用Python写一个模拟qq聊天小程序的代码实例 发布时间:2020-09-09 07:49:29

  4. QQ聊天功能在局域网中的实现

    QQ聊天功能在局域网中的实现 蒲应文 <软件报>33期 编程语言:Basic编程工具:Visual Basic 6.0 [编程引子] 随着信息化建设步伐的加快,各公司都开始了局域网办公, ...

  5. 用Python写一个模拟qq聊天小程序的代码实例

    前言 今天小编就为大家分享一篇关于用Python写一个模拟qq聊天小程序的代码实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 Python 超简单的聊天 ...

  6. python socket编程之双方相互通信简单实例_扣丁学堂Python开发socket实现简单通信功能实例...

    扣丁学堂Python开发socket实现简单通信功能实例 2018-08-21 14:12:38 747浏览 今天扣丁学堂Python培训老师给大家结合实例介绍一下关于socket实现的简单通信功能, ...

  7. 用python做毕业设计小程序_用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  8. 如何利用python实现qq聊天_用Python写一个模拟qq聊天小程序的代码实例

    Python 超简单的聊天程序 客户端: import socket, sys host = '10.248.27.23' # host = raw_input("Plz imput des ...

  9. go语言实现仿QQ聊天功能

    1.实现原理 为了最大限度的减少服务器的负担,这里使用P2P模式实现仿QQ的聊天功能,服务器端和客户端职责如下: 1)服务器端:通过TCP方式实现客户端身份认证.向已经认证的用户推送好友信息.向其他登 ...

  10. android调用qq聊天功能

    String url="mqqwpa://im/chat?chat_type=wpa&uin=2853700237"; startActivity(new Intent(I ...

最新文章

  1. GO语言教程1:Linux--debian/ubuntu下Go语言的安装
  2. The evolution of cluster scheduler architectures--转
  3. 如何在Membership中实现修改密码的功能
  4. Mysql:AVG()函数如何去除0值做平均值
  5. 计算机科学与技术专业行业人物,计算机科学与技术专业_计算机科学与技术专业求职 - 沪江英语...
  6. MATLAB已知坐标均匀取电,基于MATLAB带钢卷取电液伺服控制系统的分析(word文档良心出品)(11页)-原创力文档...
  7. gSOAP中内存的使用
  8. Git本地仓库管理远程库(GitHub)——clone(下载)、push(提交)、pull(拉取)操作
  9. 数据结构与算法--图论最短路径算法应用-词阶求解
  10. 《Java8实战》笔记(09):默认方法
  11. html 隐藏_HTML实战篇:纯css制作二级横向以及竖向菜单导航
  12. 【Oracle】DBMS_STATS.GATHER_TABLE_STATS
  13. CCF201412-2 Z字形扫描(100分)
  14. 2019年的读书印记
  15. qq音速显示服务器断开,《QQ音速》常见问题问答汇总
  16. 李彦宏:离破产永远只有30天
  17. python 正则表达式 sub_Python 正则表达式:sub
  18. 程序员的英文代号_构建一个代号为1的聊天应用程序4
  19. mysql数据同构_异构、同构 异步、同步
  20. python利用中误差检验影像精度

热门文章

  1. 市场营销人员如何用BI工具进行多维度数据分析?仅需7步
  2. 五百万微商都在用微信智能获客小程序,你还不加入?
  3. 陈强教授《机器学习及R应用》课程 第七章作业
  4. 计算机控制课程设计体会,计算机控制技术课程设计心得体会
  5. ASO优化如何做?3个核心要点必须掌握
  6. js工具栏悬浮提示文字js特效
  7. arch Linux更换字体,Arch Linux 安装后的设置
  8. 川大教师发自白书:一所高校就是一座衙门
  9. 无人驾驶之KITTI数据集介绍与应用(一)——数据组织方式介绍
  10. 计算机显示磁盘但是打不开怎么办,移动硬盘显示盘符但打不开解决教程