前面介紹了服務端架構,用戶端中的代碼可以複用其package.py和dispatch.py.
服務端方面一般是控制台運行,可是用戶端大部分都是帶ui的.
這裡分別介紹
1.console
用戶端啟動 main.py
這裡的PyConfigure不做介紹
from config import *from tcp import *def main():#[0] load configure json cfg = PyConfigure( "cfg.json" ) host = cfg.get_value( "host" ) port = cfg.get_value( "port" )#[1] connect server factory = PyClientFactory() try: reactor.connectTCP( host, port, factory ) reactor.run() except: print "connect server error."if __name__ == '__main__': main()
用戶端實現 tcp.py
from twisted.internet.protocol import ClientFactory, Protocolfrom twisted.protocols.basic import LineReceiverfrom twisted.internet import reactorfrom twisted.internet.endpoints import TCP4ClientEndpointimport sysimport structfrom dispatch import *class PyTcpClient( Protocol ): def __init__( self ): self.dispatcher = PyDispatcher( self ) def connectionMade( self ): print "login" def connectionLost( self, reason ): print "connection lost" def dataReceived( self, data ): print "receive:", data self.dispatcher.dispatch( data ) def dataSend( self, data ): print data self.transport.write( data )class PyClientFactory( ClientFactory ): protocol = PyTcpClient def clientConnectionFailed( self, connector, reason ): print 'connection failed:', reason.getErrorMessage() reactor.stop() def clientConnectionLost( self, connector, reason ): print 'connection lost:', reason.getErrorMessage() reactor.stop()
ok,這樣就可以工作了.不過代碼不夠簡潔.
2.ui
其實比較簡單:把
reactor.run()
放到線程裡面.
在下面結合pyQT4給出具體代碼.