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 相关文章推荐
在Django框架中运行Python应用全攻略
Jul 17 Python
Python的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
Python中的id()函数指的什么
Oct 17 Python
详解python字节码
Feb 07 Python
Python自定义装饰器原理与用法实例分析
Jul 16 Python
详解Python使用Plotly绘图工具,绘制甘特图
Apr 02 Python
Python OS模块实例详解
Apr 15 Python
python实现飞机大战小游戏
Nov 08 Python
python循环嵌套的多种使用方法解析
Nov 29 Python
python集成开发环境配置(pycharm)
Feb 14 Python
Python pip install如何修改默认下载路径
Apr 29 Python
python语言time库和datetime库基本使用详解
Dec 25 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
PHP4引用文件语句的对比
2006/10/09 PHP
thinkphp控制器调度使用示例
2014/02/24 PHP
PHP基于GD库的图像处理方法小结
2016/09/27 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
Linux下快速搭建php开发环境
2017/03/13 PHP
PHP编程计算两个时间段是否有交集的实现方法(不算边界重叠)
2017/05/30 PHP
laravel dingo API返回自定义错误信息的实例
2019/09/29 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
利用WebBrowser彻底解决Web打印问题(包括后台打印)
2009/06/22 Javascript
jquery键盘事件介绍
2011/01/31 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
JQuery获取当前屏幕的高度宽度的实现代码
2011/07/12 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
基于AngularJS实现页面滚动到底自动加载数据的功能
2015/10/16 Javascript
jQuery实现的精美平滑二级下拉菜单效果代码
2016/03/28 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
Backbone中View之间传值的学习心得
2016/08/09 Javascript
JavaScript实现经典排序算法之插入排序
2016/12/28 Javascript
Vue.js结合bootstrap实现分页控件
2017/03/10 Javascript
详解基于mpvue的小程序markdown适配解决方案
2018/05/08 Javascript
使用vue for时为什么要key【推荐】
2019/07/11 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
python实现忽略大小写对字符串列表排序的方法
2014/09/25 Python
简单实现python爬虫功能
2015/12/31 Python
python 匹配url中是否存在IP地址的方法
2018/06/04 Python
python实现随机漫步算法
2018/08/27 Python
Python3 itchat实现微信定时发送群消息的实例代码
2019/07/12 Python
python实现简单井字棋小游戏
2020/03/05 Python
Python 实现平台类游戏添加跳跃功能
2020/03/27 Python
使用keras实现孪生网络中的权值共享教程
2020/06/11 Python
Python selenium如何打包静态网页并下载
2020/08/12 Python
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
猫咪家具:CatsPlay
2018/11/03 全球购物
纪检干部对照检查材料
2014/08/22 职场文书
成品仓管员岗位职责
2015/04/01 职场文书
为什么MySQL8新特性会修改自增主键属性
2022/04/18 MySQL