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应用程序在windows下不出现cmd窗口的办法
May 29 Python
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
使用pandas读取csv文件的指定列方法
Apr 21 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
使用python实现mqtt的发布和订阅
May 05 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
Python正则表达式学习小例子
Mar 03 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
通过代码实例了解Python异常本质
Sep 16 Python
用Python写一个简易版弹球游戏
Apr 13 Python
python 爬取京东指定商品评论并进行情感分析
May 27 Python
python+pytest接口自动化之token关联登录的实现
Apr 06 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
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
去掉destoon资讯内容页keywords关键字自带的文章标题的方法
2014/08/21 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
兼容IE/Firefox/Opera/Safari的检测页面装载完毕的脚本Ext.onReady的实现
2009/07/14 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
JavaScript中“基本类型”之争小结
2013/01/03 Javascript
解析DHTML,JavaScript,DOM,BOM以及WEB标准的描述
2013/06/19 Javascript
JS中表单的使用小结
2014/01/11 Javascript
JS控制输入框内字符串长度
2014/05/21 Javascript
用console.table()调试javascript
2014/09/04 Javascript
javascript实现 百度翻译 可折叠的分享按钮列表
2015/03/12 Javascript
在javascript中创建对象的各种模式解析
2016/05/16 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
js操作两个json数组合并、去重,以及删除某一项元素
2020/09/22 Javascript
[01:01:31]2018DOTA2亚洲邀请赛3月29日小组赛B组 Mineski VS paiN
2018/03/30 DOTA
python实现的一只从百度开始不断搜索的小爬虫
2013/08/13 Python
简单的通用表达式求10乘阶示例
2014/03/03 Python
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python中List的sort方法指南
2014/09/01 Python
Python读取网页内容的方法
2015/07/30 Python
Java及python正则表达式详解
2017/12/27 Python
Python Logging 日志记录入门学习
2018/06/02 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
自定义Django Form中choicefield下拉菜单选取数据库内容实例
2020/03/13 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
2020/05/11 Python
Python如何定义有可选参数的元类
2020/07/31 Python
美国床垫和床上用品公司:Nest Bedding
2017/06/12 全球购物
结构工程研究生求职信
2013/10/13 职场文书
2014年学习部工作总结
2014/11/12 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
小学思想品德教学反思
2016/02/24 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android