基于进程内通讯的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中关于字符串对象的一些基础知识
Apr 08 Python
python复制文件的方法实例详解
May 22 Python
详解Python的Django框架中的模版继承
Jul 16 Python
简单讲解Python中的数字类型及基本的数学计算
Mar 11 Python
python实现图像识别功能
Jan 29 Python
Python简单爬虫导出CSV文件的实例讲解
Jul 06 Python
python中sort和sorted排序的实例方法
Aug 26 Python
Python post请求实现代码实例
Feb 28 Python
Django跨域资源共享问题(推荐)
Mar 09 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
Python实战之大鱼吃小鱼游戏的实现
Apr 01 Python
Python字符串格式化方式
Apr 07 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
关于php mvc开发模式的感想
2011/06/28 PHP
php流量统计功能的实现代码
2012/09/29 PHP
PHP中ltrim与rtrim去除左右空格及特殊字符实例
2016/01/07 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
PHP简单实现解析xml为数组的方法
2018/05/02 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
2019/07/06 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
php实现的简单多进程服务器类完整示例
2020/02/01 PHP
新闻内页-JS分页
2006/06/07 Javascript
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
javascript基本包装类型介绍
2015/04/10 Javascript
Javascript基础_简单比较undefined和null 值
2016/06/14 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
解决Webpack 热部署检测不到文件变化的问题
2018/02/22 Javascript
安装vue-cli的简易过程
2018/05/22 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
压缩Vue.js打包后的体积方法总结(Vue.js打包后体积过大问题)
2020/02/03 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
Python最基本的输入输出详解
2015/04/25 Python
深入理解NumPy简明教程---数组1
2016/12/17 Python
Python开发的HTTP库requests详解
2017/08/29 Python
python实现文字版扫雷
2020/04/24 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
Python应用实现处理excel数据过程解析
2020/06/19 Python
pytorch 常用函数 max ,eq说明
2020/06/28 Python
css3实现背景动态渐变效果
2019/12/10 HTML / CSS
美国在线打印网站:Overnight Prints
2018/10/11 全球购物
应届毕业生的自我鉴定
2013/11/13 职场文书
财务科长个人对照检查材料
2014/09/18 职场文书
优秀团员个人总结
2015/02/26 职场文书
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js