前面介绍了服务端框架,客户端中的代码可以复用其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, Protocol
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
from twisted.internet.endpoints import TCP4ClientEndpoint
import sys
import struct
from 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给出具体代码.