Socket communications
Jp Calderone
exarkun at intarweb.us
Thu Jan 16 12:13:03 EST 2003
On Thu, Jan 16, 2003 at 03:13:13PM +0100, Stefano Covino wrote:
> Thank you a lot for you ready answer.
>
> Basically, what I want to implement is a very simple protocol. I need to
> send fixed-length messages, and getting and answer again of fixed-length.
> The communication should be effective on both side.
>
> I do not know which protocol I should apply. This is the first time I try
> study this problem and I am still lacking of even the vocabulary.
> In principle a telnet (or ssh) like protocol should work, but I need an as
> quick as possible connection. The messages are coming from previously
> defines IP addresses, and I do not need to recognize the user.
Twisted makes implementing this kind of protocol trivial.
(Untested code)
from twisted.internet import protocol
class FixedLengthProtocol(protocol.Protocol):
# Length of messages to receive
length = None
# Buffer accumulating the current message
buffer = None
def __init__(self, length = 512):
self.length = length
self.buffer = []
self.count = 0
def dataReceived(self, data):
L = len(data)
if self.count + L > self.length:
self.messageReceived(
''.join(self.buffer + [data[:self.length - self.count]]
)
self.buffer = [data[self.length - self.count:]]
self.count = len(self.buffer[0])
else:
self.buffer.append(data)
self.count += L
def connectionMade(self):
"""Override me"""
def messageReceived(self, message):
"""Override me"""
def sendMessage(self, message):
assert len(message) == self.length
self.transport.write(message)
from twisted.internet import reactor
f = protocol.ServerFactory() # Server
f.protocol = FixedLengthProtocol # Server
# f = protocol.ClientFactory() # Client
# f.protocol = FixedLengthProtocol # Client
reactor.listenTCP(port, f) # Server
# reactor.connectTCP(host, port, f) # Client
reactor.run()
Jp
--
There are 10 kinds of people: those who understand binary and those who do
not.
--
12:00am up 31 days, 9:48, 2 users, load average: 0.07, 0.09, 0.04
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/python-list/attachments/20030116/b71642d3/attachment.sig>
More information about the Python-list
mailing list