之前在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()   #进入循环
服务器端lineReceived

相关文章: