python socket多线程通讯实例分析(聊天室)


Posted in Python onApril 06, 2016

本文实例讲述了python socket多线程通讯方法。分享给大家供大家参考,具体如下:

#!/usr/bin/evn python
"""
这是一个Socket+多进程的例子(聊天服务端)
"""
import socket
import threading
# 处理中文数据用的
encoding = "GBK"
def HKServer(client, addr):
 """
 与客户端时实通讯函数
 加入encoding是为了处理输入中文数据
 client 客户socket
 addr  客户address
 """
 # 通知已有的每个客户,有新的成员加入
 for c in clients: c.send(bytes("[%s]加入\r\n" % addr[1], encoding))
 # 接受客户端数据
 say = b""
 while True:
  data = client.recv(1024)
  if not data: break
  # 如果不是回车键
  if data != b'\r\n':
   say += data #.encode(encoding)
   continue
  # 把客户端发来的内容发给所有的客户端
  for c in clients:
   c.send(bytes("[%s]:%s\r\n" % (addr[1], say.decode(encoding)), encoding))
  # 内容归\x0
  say = b""
 # 客户离开后,从客户列表中移队当前客户,关闭socket连接
 clients.remove(client)
 client.close()
 # 通知已有的每个客户,有成员离开
 for c in clients: c.send(bytes("[%s]离开\r\n" % addr[1], encoding))
# 客户端列表
clients = []
# 设置IP地址与端口
HOST = ''
PORT = 9999
# 初始化socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定IP地址与端口
s.bind((HOST, PORT))
# 开始监听
s.listen(1)
# 循环等待
while True:
 # 接受客户
 client, addr = s.accept()
 # 启动新的进程与客户通信
 thread = threading.Thread(target=HKServer, args=(client, addr))
 thread.start()
 # 记录新的客户
 clients.append(client)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python使用arp欺骗伪造网关的方法
Apr 24 Python
Python入门之三角函数sin()函数实例详解
Nov 08 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
Python(Django)项目与Apache的管理交互的方法
May 16 Python
Python面向对象类的继承实例详解
Jun 27 Python
详解重置Django migration的常见方式
Feb 15 Python
Python3安装Pillow与PIL的方法
Apr 03 Python
python日志logging模块使用方法分析
May 23 Python
Python网络编程之使用TCP方式传输文件操作示例
Nov 01 Python
Python 实现将数组/矩阵转换成Image类
Jan 09 Python
Jupyter notebook如何修改平台字体
May 13 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
python文件的md5加密方法
Apr 06 #Python
python制作爬虫并将抓取结果保存到excel中
Apr 06 #Python
python基于隐马尔可夫模型实现中文拼音输入
Apr 01 #Python
Python使用BeautifulSoup库解析HTML基本使用教程
Mar 31 #Python
Python使用Mechanize模块编写爬虫的要点解析
Mar 31 #Python
Python语言实现获取主机名根据端口杀死进程
Mar 31 #Python
Linux中Python 环境软件包安装步骤
Mar 31 #Python
You might like
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
解析PHP跳出循环的方法以及continue、break、exit的区别介绍
2013/07/01 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
PHP中文乱码解决方案
2015/03/05 PHP
php中final关键字用法分析
2016/12/07 PHP
浅谈PHP中的面向对象OOP中的魔术方法
2017/06/12 PHP
ExtJS Window 最小化的一种方法
2009/11/18 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
js switch case default 的用法示例介绍
2013/10/23 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
svg动画之动态描边效果
2017/02/22 Javascript
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
vue简单封装axios插件和接口的统一管理操作示例
2020/02/02 Javascript
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python创建系统目录的方法
2015/03/11 Python
Python continue继续循环用法总结
2018/06/10 Python
Python一行代码解决矩阵旋转的问题
2019/11/30 Python
英国的屈臣氏:Boots博姿
2017/12/23 全球购物
澳大利亚排名第一的狂热牛仔品牌:ONETEASPOON
2018/11/20 全球购物
意大利时尚奢侈品店:D’Aniello Boutique
2021/01/19 全球购物
护理专业推荐信
2013/11/07 职场文书
学校与家长安全责任书
2014/07/23 职场文书
全国法制宣传日活动总结2014
2014/11/01 职场文书
党的群众路线教育实践活动心得体会(乡镇)
2014/11/03 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
2016幼儿园中班开学寄语
2015/12/03 职场文书
Python快速优雅的批量修改Word文档样式
2021/05/20 Python
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
Python Django获取URL中的数据详解
2021/11/01 Python
Python常遇到的错误和异常
2021/11/02 Python
Java中API的使用方法详情
2022/04/06 Java/Android