基于进程内通讯的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实现批量改文件名称的方法
May 25 Python
Python实现脚本锁功能(同时只能执行一个脚本)
May 10 Python
pandas 两列时间相减换算为秒的方法
Apr 20 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
Python实现的调用C语言函数功能简单实例
Mar 13 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
python 实现在无序数组中找到中位数方法
Mar 03 Python
pycharm sciview的图片另存为操作
Jun 01 Python
python语言是免费还是收费的?
Jun 15 Python
基于Python3读写INI配置文件过程解析
Jul 23 Python
Python unittest生成测试报告过程解析
Sep 08 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采集利器 Snoopy 试用心得
2011/07/03 PHP
smarty内置函数{loteral}、{ldelim}和{rdelim}用法实例
2015/01/22 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
Laravel 5.4向IoC容器中添加自定义类的方法示例
2017/08/15 PHP
CL vs ForZe BO5 第四场 2.13
2021/03/10 DOTA
JQUBar 基于JQUERY的柱状图插件
2010/11/23 Javascript
js multiple全选与取消全选实现代码
2012/12/04 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
基于JavaScript如何实现私有成员的语法特征及私有成员的实现方式
2015/10/28 Javascript
如何使用PHP+jQuery+MySQL实现异步加载ECharts地图数据(附源码下载)
2016/02/23 Javascript
AngularJS基础 ng-mouseleave 指令详解
2016/08/02 Javascript
AngularJS实现在ng-Options加上index的解决方法
2016/11/03 Javascript
pc加载更多功能和移动端下拉刷新加载数据
2016/11/07 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
JS获取短信验证码倒计时的实现代码
2017/05/22 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
微信小程序时间选择插件使用详解
2018/12/28 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
详解JavaScript实现动态的轮播图效果
2019/04/29 Javascript
package.json配置文件构成详解
2019/08/27 Javascript
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Python实现修改IE注册表功能示例
2018/05/10 Python
python+Django实现防止SQL注入的办法
2019/10/31 Python
Pyinstaller打包Scrapy项目的实现步骤
2020/09/22 Python
HTML5 CSS3实现一个精美VCD包装盒个性幻灯片案例
2014/06/16 HTML / CSS
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
extern在函数声明中是什么意思
2014/01/19 面试题
会计求职信怎么写
2015/03/20 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
MySQL创建管理RANGE分区
2022/04/13 MySQL
SpringBoot Http远程调用的方法
2022/08/14 Java/Android