我在弄乱python扭曲的库,而且似乎无法弄清楚如何让我的客户端检测关闭其套接字的服务器。我的客户端继续让我将数据发送到不存在的服务器。这是我的服务器:
from twisted.internet import protocol, reactor, endpoints, stdio
from twisted.protocols.basic import LineReceiver
class ConnectionProtocol(LineReceiver):
from os import linesep as delimiter
def lineReceived(self, line):
print 'got line: %s' % line
self.sendLine(line)
class ConnectionFactory(protocol.Factory):
def buildProtocol(self, addr):
return ConnectionProtocol()
def main():
endpoint = endpoints.UNIXServerEndpoint(reactor, './test.sock', 5, 0777, False)
endpoint.listen(ConnectionFactory())
print 'starting the reactor'
reactor.run()
main()
它所做的只是将它返回的每一行发送回连接的客户端。这是客户:
import os
from twisted.internet import protocol, reactor, endpoints, stdio
from twisted.protocols.basic import LineReceiver
class CommandProtocol(protocol.Protocol):
def dataReceived(self, data):
print data,
class StdinProtocol(LineReceiver):
from os import linesep as delimiter
def __init__(self, client):
self._client = client
def connectionMade(self):
self.transport.write('>>> ')
def lineReceived(self, line):
print 'writing line: %s' % line
self._client.transport.write(line + os.linesep)
def printError(failure):
print str(failure)
def main():
point = endpoints.UNIXClientEndpoint(reactor, './test.sock')
proto = CommandProtocol()
d = endpoints.connectProtocol(point, proto)
d.addErrback(printError)
stdio.StandardIO(StdinProtocol(proto))
reactor.run()
main()
如果我先运行服务器,然后运行客户端,然后终止服务器,则客户端仍然会写入CommandProtocol
的传输,就像什么也没有发生。我认为该errback
功能至少会报告一些内容。在客户端在服务器之前运行的情况下,将errback
使用ConnectError调用该函数,但是我特别希望检测客户端已连接到服务器并且服务器退出的情况。
如何检测服务器已关闭?
ITransport.write
如果在已断开连接的传输上被调用,则为无声无操作。
如果要了解连接已丢失,请重写该connectionLost
方法。一旦知道连接已丢失,就可以安排程序停止接受输入或对收到的输入进行其他操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句