다른 응용 프로그램에서 데이터를 보내고 받기 위해 사용하는 단순한 꼬인 TCP 서버가 있습니다. 연결이 설정되면이 응용 프로그램에 통신하고 메시지를 보낼 수 있습니다.꼬인 서버에 명령 보내기
내가 할 수 있기를 원하는 것은 외부 모듈 명령을 사용할 때 (연결될 때가 아닌) 타사 응용 프로그램에 보낼 때 및 무엇을 보낼지 결정하는 것입니다. 예를 들어, 다음은 내 서버 코드 :
from twisted.internet import reactor, protocol
# Twisted
class Tcp(protocol.Protocol):
def dataReceived(self, data):
self.transport.write(data)
print 'data received: ', data
# do something with data
def connectionMade(self, msg):
# Want to only transport message when I command not immediately when connected
self.transport.write(msg)
class TcpFactory(protocol.Factory):
def buildProtocol(self, addr):
return Tcp()
reactor.listenTCP(8001, TcpFactory())
reactor.run()
내가 (GUI 인터페이스가 운영하는) 다른 모듈이 보내는 어떤 메시지를 정의하고이 메시지가
connectionMade
에 'MSG'로 전달 될 필요가 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
제 3 자 모듈과 통신하는 가장 좋은 방법은 무엇입니까? 내 메인 모듈에 reactor.listenTCP (...)를 호출합니다. 나는 논쟁을 벌릴 수는 있지만, 이것은 한 번만 일어날 수 있습니까? callFromThread와 같은 것을 사용해야합니까? – camerausb
"제 3 자 모듈과 통신하는 가장 좋은 방법"은 자신이 무엇인지, 그리고/또는 무엇을하는지 명시하지 않은 제 3 자 모듈에 따라 다릅니다. ''인수를 전달할 수는 있지만 한번만 할 수 있나요? '''보통''connectionMade''는 한 번 호출됩니다 만 여러분이하지는 않습니다. Twisted는이 기능을 호출하여 클라이언트 ** TCP 연결 **을 확인합니다. 나중에 msg를 보내야하는 경우 다른 기능을 사용하거나 연기합니다. ''callFromThread''는 사용하는 gui 모듈에 따라 유용 할 수 있지만 대부분 스레드를 피할 수 있다고 생각합니다. –
제 질문은 다른 모듈의 함수 thirdPartyComm에 메시지를 전달하는 방법입니다. 위의 지연 코드는 연결이 이루어질 때 한 번만 실행되는 것 같습니다. 단추를 클릭 할 때마다 (필자는 PyQt를 사용하고있다) 콜백이 필요하다. 프로토콜 클래스의 함수에 액세스하여 지연을 사용하지 않고 self.transport.write (msg)를 사용하여 직접 메시지를 보낼 수 있지만 이렇게하면 dataReceived (self, data)에 아무 것도 표시되지 않습니다. – camerausb