2013-02-18 80 views
0

我有一個基於Twisted示例聊天服務器鬆散的服務器。它與telnet一起工作。現在我想要一個客戶端連接到它。我複製了一次性樣本客戶端。問題是服務器從來沒有收到應該啓動「對話」的「hello」字符串。我在FAQ中讀到,一個常見的錯誤是阻止反應堆運行,但我無法看到我在下面的代碼中可以做到這一點。誰能告訴我什麼是錯的?python twisted transport.write從不發送數據

from twisted.internet import reactor 
from twisted.internet.protocol import Factory, Protocol 
from twisted.internet.endpoints import TCP4ClientEndpoint 

class Greeter(Protocol): 
    def sendMessage(self, msg): 
     self.transport.write("%s\n" % msg) 

class GreeterFactory(Factory): 
    def buildProtocol(self, addr): 
     return Greeter() 

def gotProtocol(p): 
    p.sendMessage("hello") 
    reactor.callLater(1, p.sendMessage, "/p2") 
    reactor.callLater(2, p.transport.loseConnection) 

point = TCP4ClientEndpoint(reactor, "localhost", 8123) 
d = point.connect(GreeterFactory()) 
d.addCallback(gotProtocol) 
reactor.run() 
+0

你可以發佈你的服務器實現嗎? – sberry 2013-02-18 04:32:37

回答

2

好的。我希望這可以幫助別人。我上面的問題是我的服務器(使用lineReceived):

def lineReceived(self, line): 
     print "line received: %s" % line 
     if self.state == "GETNAME": 
      self.handle_GETNAME(line) 
     else: 
      self.handle_CHAT(line) 

預計回車和換行。因此,通過改變上述我的sendMessage:

def sendMessage(self, msg): 
     self.transport.write("%s\r\n" % msg) 

現在它工作神奇!非常簡單。