當服務器和客戶端都處於不同的終端窗口時,我無法獲得服務器和客戶端之間的通信。我可以讓他們都連接雖然不是它們的輸出實際發送到每個人窗戶向 客戶:客戶端 - 服務器聊天Twisted,Python
from twisted.internet import reactor, stdio, protocol
from twisted.protocols import basic
class Echo(basic.LineReceiver):
def connectionMade(self):
print "Welcome to the Chat, you have now connected"
def lineReceived(self, line):
self.sendLine(line)
if line=="exit":
connectionLost()
def connectionLost(self):
self.transport.loseConnection()
class EchoClientFactory(protocol.ClientFactory):
protocol = Echo
factory = EchoClientFactory()
reactor.connectTCP("localhost", ...., factory)
reactor.run()
服務器:
from twisted.internet import reactor, protocol, stdio
from twisted.protocols import basic
class Echo(basic.LineReceiver):
print "Welcome to Chat"
def connectionMade(self):
print "A new client has connected"
def lineReceived(self, line):
self.sendLine(line)
if line=="exit":
connectionLost()
def connectionLost(self):
self.transport.loseConnection()
class EchoServerFactory(protocol.ServerFactory):
protocol = Echo
factory = EchoServerFactory()
reactor.listenTCP(...., factory)
reactor.run()
你的代碼沒有工作,我只想讓他們彼此聊天,扭曲是如此混亂。 – mateus
sendLine()和self.transport.write的用途是什麼?他們似乎都是在傳輸數據,但實際上只是打印到終端窗口。 dataRecieved和lineRecieved之間的區別似乎是完全相同的。我從你的代碼嘗試了rector.callLater,它不起作用。這真是令人沮喪,我越瞭解扭曲越容易混淆它,社區已經死了,所以這個可笑的小問題已經讓我過了很久。我可以編寫服務器 - 客戶端而不是扭曲,但我只是想了解它。 Errrrrrrrrrrrrrrrrrr ...... – mateus
@mateus LineReceiver類擴展了基本協議類,並將'sendLine'定義爲一種方便的方法 - 它可能類似於'self.transport.write(line +'\ n')'。它還定義了'lineReceived',它只有在收到完整的行時才被調用,而基本的'Protocol'類具有'dataReceived',當你只有部分行(例如只有幾個字符)時被調用。如果您仍然想要調用'lineReceived',則不能在'LineReceiver'類中覆蓋'dataReceived'。 –