python基础教程总结15——5 虚拟茶话会

聊天服务器:

  服务器能接受来自不同用户的多个连接;

  允许用户同时(并行)操作;

  能解释命令,例如,say或者logout;

  容易拓展

1. 初次实现

1.1 CharServer类

  有问题。。。。。。。。。。。。。。。。

#可接受连接的服务器

from asyncore import dispatcher
import asyncore,socket

class ChatServer(dispatcher):
    def handle_accept(self):
        conn.addr=self.accept()
        print ‘Connection attempt  from‘, addr[0]   #客户端的Ip地址

s=ChatServer()
s.create_socket(socket.AF_INET, socket.SOCK_STREAM)#创建套接字
s.bind((‘ ‘,5005))#将套接字绑定到端口,空字符串(主机名),意味着本地主机(即本地所有接口),端口号为5005
s.listen(5)  #告诉服务器要监听连接,并且指定5个连接的代办的事物
asyncore.loop() #启动服务器,循环监听
#具有清理功能的基本服务器

from asyncore import dispatcher
import socket, asyncore

PORT=5005

class ChatServer(dispatcher):
    def __init__(self,port):
        dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.set_reuse_addr()
        self.bind((‘ ‘,port))
        self.listen(5)

    def  handle_accept(self):
        conn, addr=self.accept()
        print ‘Connection attempt from‘, addr[0]

if __name__ =="__main__":
    s=ChatServer(PORT)
    try: asyncore.loop()
    except KeyboardInterrupt: pass

1.2 CharSession类

1)set_terminator方法用于将行终止对象设为网络协议中通常用作终止符的"\r\n"

2)ChatSession对象会将目前读取的数据作为保存为字符串列表data。但读入更多数据时,collect_incoming_data会自动被调用,将新读入的数据追加到列表中。

3)found_terminiator方法在读到终止对象时被调用

4)ChatServer保存回话列表

5)CharServer的handle_accept方法现在创建了新的ChatSession对象,并将其追加到会话列表中

# 带有ChatSession类的服务器程序

from asyncore import dispatcher
from asynchat import async_chat
import  socket,asyncore

PORT=5005

class ChatSession(async_chat):
    def __init__(self,sock):
        async_chat.__init__(self,sock)
        self.set_terminator("\r\n")
        self.data=[]

    def  collect_incoming_data(self,data):
        self.data.append(data)

    def  found_terminator(self):
        line=‘ ‘.join(self.data)
        self.data=[]
        #处理该行数据
        print line

class ChatServer(dispatcher):
    def __init__(self,port):
        diapatcher.__init__(self)
        self.create_socket(socket.AF_INET,socket.SOCK_STREAM)
        self.set_reuse_addr()
        self.bind((‘ ‘.port))
        self.listen(5)
        self.sessions=[]

    def handle_accept(self):
        conn,addr=self.accept()
        self.sessions.append(ChatSession(com))

if __name__ == ‘__main__‘:
    s=ChatServer(PORT)
    try: asyncore.loop()
    except KeyboardInterrupt: print

1.3 整合

时间: 2024-11-03 22:41:44

python基础教程总结15——5 虚拟茶话会的相关文章

python基础教程总结15——7 自定义电子公告板

1. Python进行SQLite数据库操作 简单的介绍 SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身.它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl.C#.PHP.Java等,还有ODBC接口,同样比

python基础教程总结15——4 新闻聚合

NNTP:网络新闻传输协议,Network News Transfer Protocol 目标: 从多种不同的来源收集新闻: 用户可以轻松添加新的新闻来源(甚至是新类型的新闻来源: 程序可以将编译好的新闻报告分派出多个不同格式的目标: 程序可以轻松添加新的目标(甚至是新种类的目标) 1. 简单的新闻代理程序 1)NNTP类对象:使用NNTP服务器名字实例化:    newnews方法: 返回给定日期时间之后发布的文章: head方法:提供关于文件(主要是主题)的各种信息: body方法:提供文章

python基础教程总结15——1.即时标记

1. 测试文档: # test_input.txt Welcome to World Wide Spam. Inc. These are the corporate web pages of *World Wide Spam*, Inc. We hope you find your stay enjoyable, and that you will sample many of our products. A short history of the company World Wide Spa

python基础教程总结15——2 画幅好画

要求:从Internet上下载数据文件:  分析数据文件并提取感兴趣的部分 工具:图形生成包(ReportLab,PYX等) 数据:太阳黑子和射电辐射流量(http://services.swpc.noaa.gov/text/predicted-sunspot-radio-flux.txt) 1. 简单实现 1.1 用ReportLab画图 将字符串“Hello world”画在一个100*100像素的大小的PDF图形中间:创建一个给定大小的图纸(drawing):然后创建带有某些属性的图形元素

python基础教程_学习笔记15:标准库:一些最爱——fileinput

标准库:一些最爱 fileinput 重要的函数 函数 描述 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 lineno() 返回当前(累计)的名称 filelineno() 返回当前文件的行数 isfirstline() 检查当前行是否是文件的第一行 isstdin() 检查最后一行是否来自sys.stdin nextfile() 关闭当前文件,移动到下一个文件 close() 关闭序列 fileinput

《Python基础教程(第3版)》PDF高清版

Python基础教程(第3版) 链接: https://pan.baidu.com/s/1_sXv7pUXGJuG5Nd75_iDHA 提取码: 9b7q ? 内容简介  · · · · · · 本书包括Python程序设计的方方面面:首先从Python的安装开始,随后介绍了Python的基础知识和基本概念,包括列表.元组.字符串.字典以及各种语句:然后循序渐进地介绍了一些相对高级的主题,包括抽象.异常.魔法方法.属性.迭代器:此后探讨了如何将Python与数据库.网络.C语言等工具结合使用,从

Python基础教程(第十章 自带电池)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5459376.html______ Created on Marlowes 现在已经介绍了Python语言的大部分基础知识.Python语言的核心非常强大,同时还提供了更多值得一试的工具.Python的标准安装中还包括一组模块,称为标准库(standard library).之前已经介绍了一些模块(例如math和cmath,其中包

Python基础教程(第六章 抽象)

本文内容全部出自<Python基础教程>第二版,在此分享自己的学习之路. ______欢迎转载:http://www.cnblogs.com/Marlowes/p/5351415.html______ Created on Xu Hoo 本章将会介绍如何将语句组织成函数,这样,你可以告诉计算机如何做事,并且只需要告诉一次.有了函数以后,就不必反反复复像计算机传递同样的具体指令了.本章还会详细介绍参数(parameter)和作用域(scope)的概念,以及地柜的概念及其在程序中的用途. 6.1

《Python基础教程(第二版)》学习笔记 -&gt; 第十章 充电时刻 之 标准库

SYS sys这个模块让你能够访问与Python解释器联系紧密的变量和函数,下面是一些sys模块中重要的函数和变量: 函数和变量 描述 argv 命令行参数,包括脚本和名称 exit([arg])                退出当前的程序,可选参数为给定的返回值或者错误信息 modules 映射模块名字到载入模块的字典 path 查找模块所在目录的目录名列表 platform 平台标识符 stdin 标准输入流-- 一个类文件对象 stdout 标准输出流-- 一个类文件对象 stderr