之前在python---基础知识回顾(六)网络编程异步模块中提到过粘包现象,而且在使用twisted中提到过一种处理办法,按行接收lineReceived,当收到\r\n换行符时,才去缓冲区中获取到数据。
from twisted.internet import reactor from twisted.internet.protocol import Protocol,Factory from twisted.protocols.basic import LineReceiver class EchoServer(LineReceiver): def connectionMade(self): #建立连接的时候 print("Get connect from",self.transport.client) self.factory.numPorts = self.factory.numPorts + 1 if self.factory.numPorts > 3: self.transport.write("Too many connections , try later".encode("utf-8")) self.transport.loseConnection() self.factory.numPorts = self.factory.numPorts - 1 else: self.transport.write("Successful connections".encode("utf-8")) def connectionLost(self, reason): #连接断开的时候 print(self.transport.client,"disconnect") self.factory.numPorts = self.factory.numPorts - 1 def lineReceived(self,line): #当收到一行数据的时候 data = "reve a line :%s"%line.decode("utf-8") print(data) self.transport.write(data.encode("utf-8")) factory = Factory() factory.protocol = EchoServer port = 8080 reactor.listenTCP(port,factory) reactor.run() #进入循环