Chinaunix首页 | 论坛 | 博客
  • 博客访问: 26140829
  • 博文数量: 2065
  • 博客积分: 10377
  • 博客等级: 上将
  • 技术积分: 21525
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-04 17:50
文章分类

全部博文(2065)

文章存档

2012年(2)

2011年(19)

2010年(1160)

2009年(969)

2008年(153)

分类: Python/Ruby

2009-02-03 10:06:54

1.将TCP服务归类到一个类,用类的形式进行表示TCP服务
import socket
class TCPServer:
    def __init__(self):
        pass
    def OpenServer(self,HOST='',PORT=7000):
        try:
            sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        except socket.error:
            print 'Server error:Unable to open socket'
        sock.bind((HOST,PORT))
        sock.listen(5)
        return sock
    def EstablishConnection(self,sock,connection_handler):
        while 1:
            client_socket,address=sock.accept()
            print 'connection from','address'
            thread.start_new_thread(connection_handler,(client_socket,))
           
    def closeConnection(self,sock):
        sock.close()
2.面向对象中的一个比较强的东西就是:设计模式
应用设计模式进行写类将这些类对象组织起来处理吧!
[先来分析一下Python中的抽象类实现方法吧!]
A.简单的实现方案如下:
  1. def abstract():  
  2.     raise NotImplementedError("abstract")  
  3.   
  4. class A:  
  5.     def __init__(self): abstract()  
  6.   
  7. class B(A):  
  8.     def __init__(self):  
  9.         print self.__class__.__name__ 
B.稍复杂但灵活的方法:
  1. def abstract():  
  2.     raise NotImplementedError("abstract")  
  3.   
  4. class A:  
  5.     def __init__(self):  
  6.         if self.__class__ is A: abstract()  
  7.         print "A"  
  8.   
  9. class B(A):  
  10.     def __init__(self):  
  11.         A.__init__(self)  
  12.         print "B" 
来看具体的实现代码吧!
import socket,thread
class TCPConnection:
    self.state=TCPClosed(self.sock)
    def __init__(self,host,port):
        self.host=host
        self.port=port
        self.sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.sock.bind((host,port))
        self.sock.listen(5)
        self.state=TCPListen(self.sock)
    def OpenConnection(self):
        if state is TCPClosed:self.state=TCPListen
        if state is TCPListen:
            self.clisock=self.state.OpenConnection()
            self.state=TCPEstablished(self.clisock)
           
    def HandleConnection(self):
        if state is TCPClosed:raise CloseStateError
        if state is TCPListen:raise ListenStateError
        if state is TCPEstablished:
            self.state.HandleConnection(some_handler)
            self.state=TCPListen(self.sock)
    def CloseConnection():
        self.state=TCPClose(self.sock)
        self.state.CloseConnection()

#写一个抽象类然后让子类进行实现       
class TCPState:
    def __init__(self,sock):
        self.sock=sock
    def OpenConnection(self):
        pass
    def HandleConnection(self):
        pass
    def CloseConnection(self):
        pass
class TCPClosed(TCPState):
    def CloseConnection(self,sock):
        sock.close()
class TCPListen(TCPState):
    def OpenConnection(self,sock):
        clisock,addr=sock.accept()
        return clisock
class TCPEstablished(TCPState):
    def HandleConnection(self,handler):
        thread.start_new_thread(handler,(self.sock,))



阅读(910) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~