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 输出一个两行字符的变量
Feb 05 Python
python判断windows隐藏文件的方法
Mar 21 Python
在Python中处理XML的教程
Apr 29 Python
浅谈python内置变量-reversed(seq)
Jun 21 Python
linux环境下的python安装过程图解(含setuptools)
Nov 22 Python
pytorch 数据集图片显示方法
Jul 26 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
Python设计模式之观察者模式原理与用法详解
Jan 16 Python
使用Keras实现简单线性回归模型操作
Jun 12 Python
selenium与xpath之获取指定位置的元素的实现
Jan 26 Python
python基础之停用词过滤详解
Apr 21 Python
利用Python多线程实现图片下载器
Mar 25 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
Discuz 模板引擎的封装类代码
2008/07/18 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
AngularJS基础 ng-srcset 指令简单示例
2016/08/03 Javascript
JavaScript中的子窗口与父窗口的互相调用问题
2017/02/08 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
vue 项目接口管理的实现
2019/01/17 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
[17:13]DOTA2 HEROS教学视频教你分分钟做大人-斯拉克
2014/06/13 DOTA
python创建只读属性对象的方法(ReadOnlyObject)
2013/02/10 Python
python中实现k-means聚类算法详解
2017/11/11 Python
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
浅谈Python的条件判断语句if/else语句
2019/03/21 Python
CSS3中的Transition过度与Animation动画属性使用要点
2016/05/20 HTML / CSS
MANGO官方网站:西班牙芒果服装品牌
2017/01/15 全球购物
Bally巴利中国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/10/09 全球购物
俄罗斯在线购买飞机票、火车票、巴士票网站:Tutu.ru
2020/03/16 全球购物
董事长助理岗位职责
2014/02/18 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
护士自荐信范文
2015/03/25 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书
团队拓展训练心得体会
2016/01/12 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
Python爬虫基础之爬虫的分类知识总结
2021/05/13 Python
将MySQL的表数据全量导入clichhouse库中
2022/03/21 MySQL