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 20 Python
python实现计算倒数的方法
Jul 11 Python
python实现图片文件批量重命名
Mar 23 Python
对python3 一组数值的归一化处理方法详解
Jul 11 Python
python+unittest+requests实现接口自动化的方法
Nov 29 Python
详解pandas.DataFrame中删除包涵特定字符串所在的行
Apr 04 Python
Python timeit模块的使用实践
Jan 13 Python
Python爬虫库BeautifulSoup的介绍与简单使用实例
Jan 25 Python
深度学习入门之Pytorch 数据增强的实现
Feb 26 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
Mar 11 Python
详解pytorch tensor和ndarray转换相关总结
Sep 03 Python
python import 上级目录的导入
Nov 03 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
咖啡知识 除了喝咖啡还有那些知识点
2021/03/06 新手入门
一步一步学习PHP(1) php开发环境配置
2010/02/15 PHP
PHP程序员常见的40个陋习,你中了几个?
2014/11/20 PHP
php实现redis数据库指定库号迁移的方法
2015/01/14 PHP
通过PHP简单实例介绍文件上传
2015/12/16 PHP
PHP+MySQL实现的简单投票系统实例
2016/02/24 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
关于js中alert弹出窗口文本换行问题简单详细说明
2012/12/11 Javascript
JavaScript自定义事件介绍
2013/08/29 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
2015/01/09 Javascript
jQuery实现表格行上移下移和置顶的方法
2015/05/22 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
2016/10/24 Javascript
JS简单实现自定义右键菜单实例
2017/05/31 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
基于原生js运动方式关键点的总结(推荐)
2017/10/01 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
js循环map 获取所有的key和value的实现代码(json)
2018/05/09 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
python通过floor函数舍弃小数位的方法
2015/03/17 Python
python使用pil生成缩略图的方法
2015/03/26 Python
Python日志模块logging简介
2015/04/13 Python
python列表操作之extend和append的区别实例分析
2015/07/28 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
python模糊图片过滤的方法
2018/12/14 Python
Django框架封装外部函数示例
2019/05/28 Python
Python跳出多重循环的方法示例
2019/07/03 Python
Python如何实现小程序 无限求和平均
2020/02/18 Python
解决Keras中Embedding层masking与Concatenate层不可调和的问题
2020/06/18 Python
css3 伪类选择器快速复习小结
2019/09/10 HTML / CSS
爱尔兰电子产品购物网站:Komplett.ie
2018/04/04 全球购物
一些PHP的面试题
2015/05/06 面试题
关于运动会的稿件
2014/02/02 职场文书
房屋转让协议书
2014/10/18 职场文书
python中字符串String及其常见操作指南(方法、函数)
2022/04/06 Python