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基于DES算法加密解密实例
Jun 03 Python
用Python将IP地址在整型和字符串之间轻松转换
Mar 22 Python
python非递归全排列实现方法
Apr 10 Python
Python Web程序部署到Ubuntu服务器上的方法
Feb 22 Python
Python爬取成语接龙类网站
Oct 19 Python
pycharm中成功运行图片的配置教程
Oct 28 Python
python命令行工具Click快速掌握
Jul 04 Python
布隆过滤器的概述及Python实现方法
Dec 08 Python
django 解决自定义序列化返回处理数据为null的问题
May 20 Python
Python文件操作及内置函数flush原理解析
Oct 13 Python
python requests模块的使用示例
Apr 07 Python
Django debug为True时,css加载失败的解决方案
Apr 24 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编程注意事项的小结
2013/04/27 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
PHP函数引用返回的实例详解
2016/09/11 PHP
PHP内置函数生成随机数实例
2019/01/18 PHP
javascript 数字格式化输出的实现代码
2013/12/10 Javascript
js document.write()使用介绍
2014/02/21 Javascript
JS+CSS实现Li列表隔行换色效果的方法
2015/02/16 Javascript
jquery实现华丽的可折角广告代码
2015/09/02 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
最实用的jQuery分页插件
2016/10/09 Javascript
WebPack基础知识详解
2017/01/16 Javascript
JS Select下拉框(支持输入模糊查询)
2017/02/04 Javascript
html5+canvas实现支持触屏的签名插件教程
2017/05/08 Javascript
深入理解ES6的迭代器与生成器
2017/08/19 Javascript
node的process以及child_process模块学习笔记
2018/03/06 Javascript
JQuery模拟实现网页中自定义鼠标右键菜单功能
2018/11/14 jQuery
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
基于纯JS实现多张图片的懒加载Lazy过程解析
2019/10/14 Javascript
Antd中单个DatePicker限定时间输入范围操作
2020/10/29 Javascript
react+antd 递归实现树状目录操作
2020/11/02 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Python实现读取及写入csv文件的方法示例
2018/01/12 Python
通过python顺序修改文件名字的方法
2018/07/11 Python
selenium+python环境配置教程详解
2019/05/28 Python
Django中使用MySQL5.5的教程
2019/12/18 Python
python nohup 实现远程运行不宕机操作
2020/04/16 Python
pandas DataFrame运算的实现
2020/06/14 Python
python 实现socket服务端并发的四种方式
2020/12/14 Python
低碳环保标语
2014/06/12 职场文书
奶茶店创业计划书
2014/08/14 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
2015年招商引资工作总结
2015/04/25 职场文书
毕业设计致谢词
2015/05/14 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书