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快速查找算法应用实例
Sep 26 Python
python中global与nonlocal比较
Nov 21 Python
如何准确判断请求是搜索引擎爬虫(蜘蛛)发出的请求
Oct 13 Python
Python如何为图片添加水印
Nov 25 Python
python docx 中文字体设置的操作方法
May 08 Python
利用Django-environ如何区分不同环境
Aug 26 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
Django如何实现上传图片功能
Aug 16 Python
Python pandas自定义函数的使用方法示例
Nov 20 Python
python的range和linspace使用详解
Nov 27 Python
如何基于Python实现数字类型转换
Feb 07 Python
python区块链持久化和命令行接口实现简版
May 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
php生成无限栏目树
2017/03/16 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
Javascript实现视频轮播在pc端与移动端均可
2013/09/29 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
javascript实现在网页中运行本地程序的方法
2016/02/03 Javascript
vue开发心得和技巧分享
2016/10/27 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
js实现消息滚动效果
2017/01/18 Javascript
关于不同页面之间实现参数传递的几种方式讨论
2017/02/13 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
elementUI Vue 单个按钮显示和隐藏的变换功能(两种方法)
2018/09/04 Javascript
JS实现集合的交集、补集、差集、去重运算示例【ES5与ES6写法】
2019/02/18 Javascript
解决vue 给window添加和移除resize事件遇到的坑
2020/07/21 Javascript
Vue执行方法,方法获取data值,设置data值,方法传值操作
2020/08/05 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
python有证书的加密解密实现方法
2014/11/19 Python
在Python的Flask框架中使用日期和时间的教程
2015/04/21 Python
Python文件右键找不到IDLE打开项解决办法
2015/06/08 Python
Python读取网页内容的方法
2015/07/30 Python
利用Python画ROC曲线和AUC值计算
2016/09/19 Python
python thrift搭建服务端和客户端测试程序
2018/01/17 Python
python实现树形打印目录结构
2018/03/29 Python
tensorflow 限制显存大小的实现
2020/02/03 Python
python中如何设置代码自动提示
2020/07/15 Python
python UDF 实现对csv批量md5加密操作
2021/01/01 Python
mui几种页面跳转方式对比总结概括
2017/08/18 HTML / CSS
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
幼儿园家长评语
2014/02/10 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
信用卡工作证明模板
2014/09/14 职场文书
意外伤害赔偿协议书范文
2014/09/23 职场文书
领导欢送会主持词
2015/07/06 职场文书
培训心得体会怎么写
2016/01/25 职场文书