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脚本实现代码行数统计代码分享
Mar 10 Python
python3实现域名查询和whois查询功能
Jun 21 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
对python:threading.Thread类的使用方法详解
Jan 31 Python
python调用自定义函数的实例操作
Jun 26 Python
Python中的类与类型示例详解
Jul 10 Python
Python生态圈图像格式转换问题(推荐)
Dec 02 Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 Python
python3.6使用SMTP协议发送邮件
May 20 Python
Python HTMLTestRunner库安装过程解析
May 25 Python
Python接口测试环境搭建过程详解
Jun 29 Python
实例代码讲解Python 线程池
Aug 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在线生成二维码代码(google api)
2013/06/03 PHP
php获取目标函数执行时间示例
2014/03/04 PHP
根据判断浏览器类型屏幕分辨率自动调用不同CSS的代码
2007/02/22 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
javascript框架设计之框架分类及主要功能
2015/06/23 Javascript
JS+CSS实现滑动切换tab菜单效果
2015/08/25 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
利用原生js实现html5小游戏之打砖块(附源码)
2018/01/03 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
js全屏事件fullscreenchange 实现全屏、退出全屏操作
2019/09/17 Javascript
vue中的双向数据绑定原理与常见操作技巧详解
2020/03/16 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
Vue管理系统前端之组件拆分封装详解
2020/08/23 Javascript
python33 urllib2使用方法细节讲解
2013/12/03 Python
Python中的__slots__示例详解
2017/07/06 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
pandas pivot_table() 按日期分多列数据的方法
2018/11/16 Python
在django admin中添加自定义视图的例子
2019/07/26 Python
Python字符串的修改方法实例
2019/12/19 Python
德国高品质男装及配饰商城:Cultizm(Raw Denim原色牛仔裤)
2018/04/16 全球购物
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
如何设定的weblogic的热启动模式(开发模式)与产品发布模式
2012/09/08 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
教师师德教育的自我评价
2013/10/31 职场文书
大一期末自我鉴定
2013/12/13 职场文书
表彰先进集体通报
2014/01/12 职场文书
酒店员工培训方案
2014/06/02 职场文书
党员批评与自我批评(5篇)
2014/09/23 职场文书
还款承诺书范本
2015/01/20 职场文书
交通事故赔偿起诉书
2015/05/20 职场文书
Golang标准库syscall详解(什么是系统调用)
2021/05/25 Golang