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 21 Python
Python中的ctime()方法使用教程
May 22 Python
Python使用getpass库读取密码的示例
Oct 10 Python
python实现redis三种cas事务操作
Dec 19 Python
python+matplotlib演示电偶极子实例代码
Jan 12 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
解决python字典对值(值为列表)赋值出现重复的问题
Jan 20 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
Aug 23 Python
使用python计算三角形的斜边例子
Apr 15 Python
Keras设置以及获取权重的实现
Jun 19 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 Python
python字典的元素访问实例详解
Jul 21 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
Windows下PHP的任意文件执行漏洞
2006/10/09 PHP
php 获取完整url地址
2008/12/20 PHP
10条php编程小技巧
2015/07/07 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
Javascript判断文件是否存在(客户端/服务器端)
2014/09/16 Javascript
Bootstrap面板学习使用
2017/02/09 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
vue-cli + sass 的正确打开方式图文详解
2017/10/27 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
js代码实现轮播图
2020/05/04 Javascript
Vue双向绑定实现原理与方法详解
2020/05/07 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
python解析模块(ConfigParser)使用方法
2013/12/10 Python
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
CentOS安装pillow报错的解决方法
2016/01/27 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
python读取和保存视频文件
2018/04/16 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
python3从网络摄像机解析mjpeg http流的示例
2020/11/13 Python
利用CSS3实现开门效果实例源码
2016/08/22 HTML / CSS
canvas绘制表情包的示例代码
2018/07/09 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
如何转换一个字符串到enum值
2014/04/12 面试题
百度JavaScript笔试题
2015/01/15 面试题
英语老师推荐信
2014/02/26 职场文书
被告答辩状范文
2015/05/22 职场文书
干货:企业内部人才推荐奖励方案!
2019/07/09 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL
CSS元素定位之通过元素的标签或者元素的id、class属性定位详解
2022/09/23 HTML / CSS