基于进程内通讯的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 相关文章推荐
django模型中的字段和model名显示为中文小技巧分享
Nov 18 Python
用Python编写一个简单的FUSE文件系统的教程
Apr 02 Python
Python简单获取自身外网IP的方法
Sep 18 Python
Python搭建HTTP服务器和FTP服务器
Mar 09 Python
python实现12306火车票查询器
Apr 20 Python
Python 保存矩阵为Excel的实现方法
Jan 28 Python
PyTorch搭建多项式回归模型(三)
May 22 Python
Django Admin中增加导出Excel功能过程解析
Sep 04 Python
Python小白垃圾回收机制入门
Jun 09 Python
如何解决python多种版本冲突问题
Oct 13 Python
python如何控制进程或者线程的个数
Oct 16 Python
python 镜像环境搭建总结
Sep 23 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
一个显示天气预报的程序
2006/10/09 PHP
PHP4实际应用经验篇(6)
2006/10/09 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php中try catch捕获异常实例详解
2020/08/06 PHP
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
情人节单身的我是如何在敲完代码之后收到12束玫瑰的(javascript)
2015/08/21 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
node.js Sequelize实现单实例字段或批量自增、自减
2016/12/08 Javascript
详解NodeJs支付宝移动支付签名及验签
2017/01/06 NodeJs
layui前段框架日期控件使用方法详解
2017/05/19 Javascript
Javascript实现异步编程的过程
2018/06/18 Javascript
ligerUI的ligerDialog关闭刷新的方法
2019/09/27 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
[03:44]2014DOTA2国际邀请赛 71专访:DK战队赛前讨论视频遭泄露
2014/07/13 DOTA
[40:10]2015国际邀请赛全明星表演赛
2015/08/07 DOTA
python中的函数用法入门教程
2014/09/02 Python
Python内置函数delattr的具体用法
2017/11/23 Python
在Python dataframe中出生日期转化为年龄的实现方法
2018/10/20 Python
Java Spring项目国际化(i18n)详细方法与实例
2020/03/20 Python
Python闭包及装饰器运行原理解析
2020/06/17 Python
详解Django中views数据查询使用locals()函数进行优化
2020/08/24 Python
python 获取剪切板内容的两种方法
2020/11/28 Python
北京银河万佳Java面试题
2012/03/21 面试题
质量提升方案
2014/06/16 职场文书
二人合伙经营协议书
2014/09/13 职场文书
学校法制宣传日活动总结
2014/11/01 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
工会工作个人总结
2015/03/03 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript
Oracle中update和select 关联操作
2022/01/18 Oracle
如何利用python创作字符画
2022/06/25 Python