基于进程内通讯的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 相关文章推荐
vc6编写python扩展的方法分享
Jan 17 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
使用python实现生成用户信息
Mar 20 Python
python Matplotlib画图之调整字体大小的示例
Nov 20 Python
对python中的logger模块全面讲解
Apr 28 Python
python 编码规范整理
May 05 Python
Numpy中矩阵matrix读取一列的方法及数组和矩阵的相互转换实例
Jul 02 Python
在python带权重的列表中随机取值的方法
Jan 23 Python
Pytorch模型转onnx模型实例
Jan 15 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
使用anaconda安装pytorch的实现步骤
Sep 03 Python
Python实现查询剪贴板自动匹配信息的思路详解
Jul 09 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+mysql一个名片库程序
2006/10/09 PHP
php实现源代码加密的方法
2015/07/11 PHP
学习php设计模式 php实现模板方法模式
2015/12/08 PHP
Javascript 获取LI里的内容
2008/12/17 Javascript
用Javascript 和 CSS 实现脚注(Footnote)效果
2009/09/09 Javascript
JavaScript 对象成员的可见性说明
2009/10/16 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
利用js实现选项卡的特别效果的实例
2013/03/03 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
使用AngularJS创建自定义的过滤器的方法
2015/06/18 Javascript
基于jQuery实现的双11天猫拆红包抽奖效果
2015/12/01 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
es7学习教程之Decorators(修饰器)详解
2017/07/21 Javascript
浅谈react+es6+webpack的基础配置
2017/08/09 Javascript
集成vue到jquery/bootstrap项目的方法
2018/02/10 jQuery
使用use注册Vue全局组件和全局指令的方法
2018/03/08 Javascript
详解javascript 正则表达式之分组与前瞻匹配
2018/05/30 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
vue+echarts实现中国地图流动效果(步骤详解)
2021/01/27 Vue.js
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
python爬取m3u8连接的视频
2018/02/28 Python
Python考拉兹猜想输出序列代码实践
2019/07/05 Python
Python with标签使用方法解析
2020/01/17 Python
Python实现上下文管理器的方法
2020/08/07 Python
html5中canvas学习笔记2-判断浏览器是否支持canvas
2013/01/06 HTML / CSS
五年后的职业生涯规划
2014/03/04 职场文书
分层教学实施方案
2014/03/19 职场文书
2014领导班子“四风问题”对照检查材料思想汇报(执法局)
2014/09/21 职场文书
2015年见习期工作总结
2014/12/12 职场文书
广告业务员岗位职责
2015/02/13 职场文书
春节晚会开场白
2015/05/29 职场文书
压缩Redis里的字符串大对象操作
2021/06/23 Redis
Nginx限流和黑名单配置
2022/05/20 Servers