On 05:58 pm, bradley.s.gaspard@saic.com wrote:
>
>I am trying to write a TCP client that at regular intervals connects to a server makes a request and then closes the connection.
Your code has a fatal problem. Nowhere are you actually creating a client connection, you're just creating protocol objects and not hooking them up to anything! I've whipped up a quick periodic ping/pong client/server pair for you here, which should provide a useful starting point for you.
The key thing is the call to the ClientCreator's 'connectTCP' method, which actually hooks up an instantiated PingSender to a socket.
-------- cut
from twisted.internet.protocol import Protocol, ClientCreator, Factory
from twisted.internet.task import LoopingCall
from twisted.internet import reactor
class PingResponder(Protocol):
buf = ''
def dataReceived(self, data):
self.buf += data
if self.buf == 'PING':
print 'PONGED!'
self.transport.write('PONG')
self.transport.loseConnection()
class PingSender(Protocol):
buf = ''
def connectionMade(self):
self.transport.write("PING")
def dataReceived(self, data):
self.buf += data
def connectionLost(self, reason):
print "PONGED WITH: " +self.buf
def client():
cc = ClientCreator(reactor, PingSender)
def dontDelay():
cc.connectTCP('localhost', 4321)
lc = LoopingCall(dontDelay)
lc.start(0.5)
def server():
pf = Factory()
pf.protocol = PingResponder
svr = reactor.listenTCP(4321, pf)
import sys
if sys.argv[1] == 'client':
client()
else:
server()
reactor.run()