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使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
讲解Python中if语句的嵌套用法
May 14 Python
python看某个模块的版本方法
Oct 16 Python
利用Pycharm断点调试Python程序的方法
Nov 29 Python
在pycharm中使用git版本管理以及同步github的方法
Jan 16 Python
Djang的model创建的字段和参数详解
Jul 27 Python
在tensorflow中设置保存checkpoint的最大数量实例
Jan 21 Python
TensorFlow保存TensorBoard图像操作
Jun 23 Python
Python字符串split及rsplit方法原理详解
Jun 29 Python
浅析python 字典嵌套
Sep 29 Python
Python3如何使用range函数替代xrange函数
Oct 05 Python
python sleep和wait对比总结
Feb 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
C#静态方法与非静态方法实例分析
2014/09/22 PHP
php中ob_flush函数和flush函数用法分析
2015/03/18 PHP
ThinkPHP和UCenter接口冲突的解决方法
2016/07/25 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
JavaScript中的Truthy和Falsy介绍
2015/01/01 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
javascript中Date对象的使用总结
2016/11/21 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
详解ES6 系列之异步处理实战
2018/10/26 Javascript
js实现简单模态框实例
2018/11/16 Javascript
原生js实现Flappy Bird小游戏
2018/12/24 Javascript
如何使用proxy实现一个简单完整的MVVM库的示例代码
2019/09/17 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
使用Vant完成DatetimePicker 日期的选择器操作
2020/11/12 Javascript
Python中Django发送带图片和附件的邮件
2017/03/31 Python
python下10个简单实例代码
2017/11/15 Python
Python简单获取网卡名称及其IP地址的方法【基于psutil模块】
2018/05/24 Python
python实现画一颗树和一片森林
2018/06/25 Python
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
pycharm显示远程图片的实现
2019/11/04 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
Python写捕鱼达人的游戏实现
2020/03/31 Python
Python Unittest原理及基本使用方法
2020/11/06 Python
2014年计算机专业个人自我评价
2014/01/19 职场文书
大学生职业生涯规划书汇总
2014/03/20 职场文书
临床护理求职信
2014/04/26 职场文书
奠基仪式策划方案
2014/05/15 职场文书
县政府班子个人对照检查材料
2014/10/05 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
服装店员工管理制度
2015/08/07 职场文书
2016三八妇女节慰问信
2015/11/30 职场文书
【海涛解说】史上最给力比赛,挑战DOTA极限
2022/04/01 DOTA