基于进程内通讯的python聊天室实现方法


Posted in Python onJune 28, 2015

本文实例讲述了基于进程内通讯的python聊天室实现方法。分享给大家供大家参考。具体如下:

#!/usr/bin/env python
# Added by <ctang@redhat.com>
import sys
import os
from multiprocessing import connection
ADDR = ('', 9997)
AUTH_KEY = '12345'
class Server(object):
  def __init__(self, username):
    self.auth_key = AUTH_KEY
    self.addr = ADDR
    self.username = username
    self.listener = connection.Listener(self.addr, authkey=self.auth_key)
  def listen(self):
    while True:
      conn = self.listener.accept()
      while True:
        try:
          request = conn.recv()
          response = self.response(request)
          conn.send(response)
        except EOFError:
          break
      conn.close()
  def reply(self):
    message = raw_input("%s: " % self.username)
    return message
  def output_request(self, request):
    sys.stdout.write('%s says: %s\n' % request)
  def response(self, request):
    self.output_request(request)
    response = (self.username, self.reply())
    return response
class Client(object):
  def __init__(self, username):
    self.auth_key = AUTH_KEY
    self.addr = ADDR
    self.username = username
    self.display_name = self.make_display_name(username)
  def make_display_name(self, username):
    return "%s: " % username
  def connect(self):
    self.conn = connection.Client(self.addr, authkey=self.auth_key)
    while True:
      message = raw_input(self.display_name)
      self.send(message)
      response = self.conn.recv()
      self.output_response(response) 
  def send(self, message):
    self.conn.send((self.username, message))
  def output_response(self, response):
    sys.stdout.write('%s says: %s\n' % response)
def main():
  mode = sys.argv[1]
  if mode == 'server':
    username = raw_input("Your name please: ")
    server = Server(username)
    server.listen()
  elif mode == 'client':
    username = raw_input("Your name please: ")
    client = Client(username)
    client.connect()
if __name__ == '__main__':
  main()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
Dec 14 Python
Python实现Logger打印功能的方法详解
Sep 01 Python
Python实现购物系统(示例讲解)
Sep 13 Python
flask使用session保存登录状态及拦截未登录请求代码
Jan 19 Python
解决DataFrame排序sort的问题
Jun 07 Python
python高效过滤出文件夹下指定文件名结尾的文件实例
Oct 21 Python
python3获取文件中url内容并下载代码实例
Dec 27 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
Spark处理数据排序问题如何避免OOM
May 21 Python
Python Tornado核心及相关原理详解
Jun 24 Python
Python Map 函数的使用
Aug 28 Python
python实现的简单RPG游戏流程实例
Jun 28 #Python
python实现自动登录人人网并采集信息的方法
Jun 28 #Python
Python实现将绝对URL替换成相对URL的方法
Jun 28 #Python
python实现将html表格转换成CSV文件的方法
Jun 28 #Python
python实现根据主机名字获得所有ip地址的方法
Jun 28 #Python
python自动zip压缩目录的方法
Jun 28 #Python
python查找指定具有相同内容文件的方法
Jun 28 #Python
You might like
PHP代码保护--Zend Guard的使用详解
2013/06/03 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
理解Javascript闭包
2013/11/01 Javascript
关于Javascript 对象(object)的prototype
2014/05/09 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
Labelauty?jQuery单选框/复选框美化插件分享
2015/09/26 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
EasyUI创建对话框的两种方式
2016/08/23 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
2016/11/07 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
利用nvm管理多个版本的node.js与npm详解
2017/11/02 Javascript
基于vue.js 2.x的虚拟滚动条的示例代码
2018/01/23 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
利用Python将每日一句定时推送至微信的实现方法
2018/08/13 Python
Python 中导入csv数据的三种方法
2018/11/01 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
Python使用Pandas对csv文件进行数据处理的方法
2019/08/01 Python
Python使用selenium + headless chrome获取网页内容的方法示例
2019/10/16 Python
Python编程快速上手——Excel表格创建乘法表案例分析
2020/02/28 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
python数据抓取3种方法总结
2021/02/07 Python
CSS3选择器新增问题的实现
2021/01/21 HTML / CSS
兰蔻美国官网:Lancome美国
2017/04/25 全球购物
Toppik顶丰增发纤维官网:解决头发稀疏
2017/12/30 全球购物
公司司机岗位职责
2014/02/07 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
党员目标管理责任书
2014/07/25 职场文书
一文读懂go中semaphore(信号量)源码
2021/04/03 Golang
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS