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中使用hashlib模块处理算法的教程
Apr 28 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python获取linux主机ip的简单实现方法
Apr 18 Python
Python 数据结构之旋转链表
Feb 25 Python
分享6个隐藏的python功能
Dec 07 Python
python生成圆形图片的方法
Mar 25 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
python pexpect ssh 远程登录服务器的方法
Feb 14 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
Apr 01 Python
Python自动采集微信联系人的实现示例
Feb 28 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
Python中Cookies导出某站用户数据的方法
May 17 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作的文本留言本的例子(四)
2006/10/09 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
php简单实现屏蔽指定ip段用户的访问
2015/04/29 PHP
php对象和数组相互转换的方法
2015/05/12 PHP
PHP基于curl后台远程登录正方教务系统的方法
2016/10/14 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
VBScript版代码高亮
2006/06/26 Javascript
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
几行代码轻松搞定jquery实现flash8类似的连接效果
2007/05/03 Javascript
IE浏览器不支持getElementsByClassName的解决方法
2014/08/27 Javascript
详谈js原型继承的一些问题
2017/09/06 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
Node.js + express基本用法教程
2019/03/14 Javascript
使用vue实现多规格选择实例(SKU)
2019/08/23 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
2016/12/12 Python
Python中property属性实例解析
2018/02/10 Python
python找出完数的方法
2018/11/12 Python
Python爬虫实战之12306抢票开源
2019/01/24 Python
pyside+pyqt实现鼠标右键菜单功能
2020/12/08 Python
python爬虫增加访问量的方法
2019/08/22 Python
python 中值滤波,椒盐去噪,图片增强实例
2019/12/18 Python
HTML5 拖放功能实现代码
2016/07/14 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
运动会方阵解说词
2014/02/12 职场文书
应用外语系自荐信
2014/06/26 职场文书
科级干部群众路线教育实践活动个人对照检查材料
2014/09/19 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
Python控制台输出俄罗斯方块的方法实例
2021/04/17 Python
javascript Number 与 Math对象的介绍
2021/11/17 Javascript