码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-07-28 20:33:43      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:

聊天服务器:

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

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

  能解释命令,例如,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 整合

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

标签:

原文地址:http://www.cnblogs.com/zxqstrong/p/4683638.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!