基于进程内通讯的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 字符串操作实现代码(截取/替换/查找/分割)
Jun 08 Python
Windows系统配置python脚本开机启动的3种方法分享
Mar 10 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
Jun 30 Python
Python中的sort()方法使用基础教程
Jan 08 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
浅析python协程相关概念
Jan 20 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 Python
Python读取stdin方法实例
May 24 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
Python Pygame实战之塔防游戏的实现
Mar 17 Python
python神经网络Xception模型
May 06 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获取远程文件内容的函数
2015/11/02 PHP
PHP获取数组中单列值的方法
2017/06/10 PHP
laravel请求参数校验方法
2019/10/10 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
基于jquery的页面划词搜索JS
2010/09/14 Javascript
纯js网页画板(Graphics)类简介及实现代码
2012/12/24 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
2013/12/23 Javascript
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
Angularjs中使用指令绑定点击事件的方法
2017/03/30 Javascript
微信小程序 支付功能(前端)的实现
2017/05/24 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
ES6新增的math,Number方法
2017/08/06 Javascript
json2.js 入门教程之使用方法与实例分析
2017/09/14 Javascript
基于vue-element组件实现音乐播放器功能
2018/05/06 Javascript
Bootstrap table 实现树形表格联动选中联动取消功能
2019/09/30 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
JavaScript中layim之整合右键菜单的示例代码
2021/02/06 Javascript
[01:07:15]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第二场 1月25日
2021/03/11 DOTA
Python正则简单实例分析
2017/03/21 Python
使用python爬取B站千万级数据
2018/06/08 Python
PyCharm代码回滚,恢复历史版本的解决方法
2018/10/22 Python
Python3+Appium安装使用教程
2019/07/05 Python
对Django的restful用法详解(自带的增删改查)
2019/08/28 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
将SVG图引入到HTML页面的实现
2019/09/20 HTML / CSS
UGG雪地靴德国官网:UGG德国
2016/11/19 全球购物
选购国际女性时装设计师品牌:IFCHIC(支持中文)
2018/04/12 全球购物
存储过程和sql语句的优缺点
2014/07/02 面试题
化工工艺专业求职信
2013/09/22 职场文书
职业生涯规划书基本格式
2014/01/06 职场文书
2014的自我评价
2014/01/13 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书