Şimdi yaklaşık bir yıldır küçük bir bükülmüş uygulama yapıyorum. Her şey şubat ayı sonuna kadar iyi çalıştı. O zamandan beri müşteri ve sunucu arasında veri aktaramıyorum. Benim gerçek koduna göre biraz örnek hazırlandı:Twisted 16 LineReceiver: Geri arama yok
Sunucu:
from twisted.python.filepath import FilePath
from twisted.logger import Logger, textFileLogObserver, globalLogPublisher, globalLogBeginner
from twisted.internet.endpoints import SSL4ServerEndpoint
from twisted.internet.ssl import PrivateCertificate, Certificate
from twisted.internet.defer import Deferred
from twisted.internet.task import react
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
import codecs
import sqlite3
import os
import sys
globalLogBeginner.beginLoggingTo([textFileLogObserver(sys.stdout)])
loggy = Logger()
class Ex_Factory(Factory):
def __init__(self, loggy):
self.loggy = loggy
def buildProtocol(self, addr):
return Ex_Protocol(self.loggy)
class Ex_Protocol(LineReceiver):
def dataReceived(self,data):
self.loggy.info('mmm')
def connectionMade(self):
self.sendLine(b'hello')
self.loggy.info('ConMade')
def __init__(self, loggy):
self.loggy = loggy
self.loggy.info('Works')
def lineReceived(self, data):
self.loggy.info('I am not called! But why?')
def main(reactor):
#Set up a SSL-Endpoint
pemBytes = FilePath(b"private.pem").getContent()
certificateAuthority = Certificate.loadPEM(pemBytes)
myCertificate = PrivateCertificate.loadPEM(pemBytes)
serverEndpoint = SSL4ServerEndpoint(
reactor, 1234, myCertificate.options(certificateAuthority)
)
serverEndpoint.listen(Ex_Factory(loggy))
return Deferred()
react(main, [])
Müşteri:
dir="/working_dir"
certname="private.pem"
from twisted.python.filepath import FilePath
from twisted.internet.endpoints import SSL4ClientEndpoint
from twisted.internet.ssl import (PrivateCertificate, Certificate, optionsForClientTLS)
from twisted.internet.defer import Deferred, inlineCallbacks
from twisted.internet.task import react
from twisted.internet.protocol import Factory
from twisted.protocols.basic import LineReceiver
import os
class SendAnyData(LineReceiver):
deferred = Deferred()
def connectionMade(self):
print('ConMade!')
self.sendLine(b"START")
self.transport.write(b"START\r\n")
def connectionLost(self, reason):
print('ConLost!')
self.deferred.callback(None)
def lineReceived(self, data):
line = data.decode("UTF-8")
@inlineCallbacks
def main(reactor):
def getServerandPort(i):
return ("1.2.3.4",1234)
pem = FilePath(b"Certificates/"+certname.encode("UTF-8")).getContent()
caPem = FilePath(b"Certificates/ca-private-cert.pem").getContent()
host, port = getServerandPort(0)
clientEndpoint = SSL4ClientEndpoint(
reactor, host, port,
optionsForClientTLS(u"ABC", Certificate.loadPEM(caPem),
PrivateCertificate.loadPEM(pem)),
)
factory = Factory.forProtocol(SendAnyData)
proto = yield clientEndpoint.connect(factory)
yield proto.deferred
os.chdir(dir)
react(main)
Ben Debian üzerinde Python 3.4.2 kullanarak iki ayrı Ahududu Pis uygulamayı çalıştırdığınızda Jessie, bu sunucudan çıktı:
2016-04-09T11:44:01+0200 [-] Ex_Factory (TLS) starting on 1234
2016-04-09T11:44:01+0200 [__main__.Ex_Factory#info] Starting factory <__main__.Ex_Factory object at 0xb5f2ee50>
2016-04-09T11:44:49+0200 [__main__#info] Works
2016-04-09T11:44:49+0200 [__main__#info] ConMade
^C2016-04-09T11:46:54+0200 [-] Received SIGINT, shutting down.
2016-04-09T11:46:54+0200 [twisted.protocols.tls.TLSMemoryBIOFactory] (TLS Port 1234 Closed)
2016-04-09T11:46:54+0200 [__main__.Ex_Factory#info] Stopping factory <__main__.Ex_Factory object at 0xb5f2ee50>
2016-04-09T11:46:54+0200 [-] Main loop terminated.
Neden hiç satır yok istemciden sunucuya ("BAŞLANGIÇ") gönderildi mi? Neyi yanlış yapıyorum?
Yardımlarınız için çok teşekkür ederim.