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字符编码
Aug 03 Python
pycharm设置注释颜色的方法
May 23 Python
python中ASCII码和字符的转换方法
Jul 09 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
Python实现的建造者模式示例
Aug 06 Python
对python的输出和输出格式详解
Dec 08 Python
python实现文件的备份流程详解
Jun 18 Python
Python 获取ftp服务器文件时间的方法
Jul 02 Python
python模拟鼠标点击和键盘输入的操作
Aug 04 Python
Keras loss函数剖析
Jul 06 Python
python 用opencv实现霍夫线变换
Nov 27 Python
python推导式的使用方法实例
Feb 28 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
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
PHP图像处理类库及演示分享
2015/05/17 PHP
Symfony生成二维码的方法
2016/02/04 PHP
又拍云异步上传实例教程详解
2016/04/19 PHP
分析Node.js connect ECONNREFUSED错误
2013/04/09 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
禁用Tab键JS代码兼容Firefox和IE
2014/04/18 Javascript
JavaScrip调试技巧之断点调试
2015/10/22 Javascript
基于canvas实现的绚丽圆圈效果完整实例
2016/01/26 Javascript
easyui导出excel无法弹出下载框的快速解决方法
2016/11/10 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
在Bootstrap开发框架中使用dataTable直接录入表格行数据的方法
2018/10/25 Javascript
Vue触发隐藏input file的方法实例详解
2019/08/14 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
js正则表达式简单校验方法
2021/01/03 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
Python中对列表排序实例
2015/01/04 Python
Python lxml模块安装教程
2015/06/02 Python
python使用turtle库绘制时钟
2020/03/25 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
Python 代码调试技巧示例代码
2020/08/11 Python
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
解决margin 外边距合并问题
2019/07/03 HTML / CSS
几道Java和数据库的面试题
2013/05/30 面试题
土木建筑学生自我评价
2014/01/14 职场文书
捐书寄语赠言
2014/01/18 职场文书
优秀党员主要事迹
2014/01/19 职场文书
社区戒毒工作方案
2014/06/04 职场文书
英语分层教学实施方案
2014/06/15 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
对学校的意见和建议
2015/06/04 职场文书
婚前协议书怎么写,才具有法律效力呢 ?
2019/06/28 职场文书
公文格式,规则明细(新手收藏)
2019/07/23 职场文书
2021-4-5课程——SQL Server查询【3】
2021/04/05 SQL Server
C站最全Python标准库总结,你想要的都在这里
2021/07/03 Python