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 字符串split的用法分享
Mar 23 Python
Python计算一个文件里字数的方法
Jun 15 Python
python实现上传下载文件功能
Nov 19 Python
Python面向对象编程基础解析(一)
Oct 26 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
python添加模块搜索路径和包的导入方法
Jan 19 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
Python3.5模块的定义、导入、优化操作图文详解
Apr 27 Python
Python面向对象之私有属性和私有方法应用案例分析
Dec 31 Python
Pycharm plot独立窗口显示的操作
Dec 11 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 Python
一些让Python代码简洁的实用技巧总结
Aug 23 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源代码数组统计count分析
2011/08/02 PHP
Yii使用Captcha验证码的方法
2015/12/28 PHP
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
javascript 实现键盘上下左右功能的小例子
2013/09/15 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
深入探讨JavaScript、JQuery屏蔽网页鼠标右键菜单及禁止选择复制
2014/06/10 Javascript
js读取json的两种常用方法示例介绍
2014/10/19 Javascript
JS实现具备延时功能的滑动门菜单效果
2015/09/17 Javascript
使用jQuery UI库开发Web界面的简单入门指引
2016/04/22 Javascript
JavaScript数组的定义及数字操作技巧
2016/06/06 Javascript
NodeJS中的MongoDB快速入门详细教程
2016/11/11 NodeJs
EasyUI为Numberbox添加blur事件的方法
2017/03/05 Javascript
vue表单绑定实现多选框和下拉列表的实例
2017/08/12 Javascript
JS传播事件、取消事件默认行为、阻止事件传播详解
2017/08/14 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
Angular6 Filter实现页面搜索的示例代码
2018/12/02 Javascript
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python将string转换到float的实例方法
2019/07/29 Python
详解Python并发编程之创建多线程的几种方法
2019/08/23 Python
wxPython实现整点报时
2019/11/18 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Flask 上传自定义头像的实例详解
2020/01/09 Python
python主要用于哪些方向
2020/07/05 Python
详细分析Python可变对象和不可变对象
2020/07/09 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
Christys’ Hats官网:英国帽子制造商
2018/11/28 全球购物
欧洲领先的技术商店:eibmarkt.com
2019/05/10 全球购物
C语言变量的命名规则都有哪些
2013/12/27 面试题
社保转移委托书范本
2014/10/08 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
七年级数学教学反思
2016/02/17 职场文书
导游词幽默开场白
2019/06/26 职场文书
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers