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提取html文件中的特定数据的实现代码
Mar 24 Python
将Django框架和遗留的Web应用集成的方法
Jul 24 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
python实现根据指定字符截取对应的行的内容方法
Oct 23 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
Jan 04 Python
简单了解python关系(比较)运算符
Jul 08 Python
python使用装饰器作日志处理的方法
Jul 11 Python
Django 对IP访问频率进行限制的例子
Aug 30 Python
python 6行代码制作月历生成器
Sep 18 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
Jun 28 Python
python中filter,map,reduce的作用
Jun 10 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实现查询手机归属地的方法详解
2017/04/28 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
IE8中使用javascript动态加载CSS的解决方法
2014/06/17 Javascript
JavaScript 模块化编程(笔记)
2015/04/08 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
2015/08/21 Javascript
JavaScript给input的value赋值引发的关于基本类型值和引用类型值问题
2015/12/07 Javascript
由浅入深讲解Javascript继承机制与simple-inheritance源码分析
2015/12/13 Javascript
jQuery实现简单隔行变色的方法
2016/02/20 Javascript
javascript 继承学习心得总结
2016/03/17 Javascript
每日十条JavaScript经验技巧(一)
2016/06/23 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
在antd4.0中Form使用initialValue操作
2020/11/02 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
python虚拟环境virualenv的安装与使用
2016/12/18 Python
在Python中居然可以定义两个同名通参数的函数
2019/01/31 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
tensorflow常用函数API介绍
2020/04/19 Python
自学python用什么系统好
2020/06/23 Python
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
单位门卫岗位职责
2013/12/20 职场文书
拾金不昧表扬信范文
2014/01/11 职场文书
校园摄影活动策划方案
2014/02/05 职场文书
售房协议书
2014/08/19 职场文书
2014大学生学生会工作总结
2014/12/19 职场文书
公司会议开幕词
2015/01/29 职场文书
农村老人去世追悼词
2015/06/23 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python
Nginx实现会话保持的两种方式
2022/03/18 Servers