UDP Client/Server
Martin Marcher
martin at marcher.name
Tue Jan 22 17:58:15 EST 2008
Hello,
I created a really simple udp server and protocol but I only get every 2nd
request (and thus answer just every second request).
Maybe someone could shed some light, I'm lost in the dark(tm), sorry if this
is a bit oververbose but to me everything that happens here is black magic,
and I have no clue where the packages go. I can't think of a simpler
protocol than to just receive a fixed max UDP packet size and answer
immediately (read an "echo" server).
thanks
martin
### server
>>> from socket import *
>>> import SocketServer
>>> from SocketServer import BaseRequestHandler, UDPServer
>>> class FooReceiveServer(SocketServer.UDPServer):
... def __init__(self):
... SocketServer.UDPServer.__init__(self, ("localhost", 4321),
FooRequestHandler)
...
>>> class FooRequestHandler(BaseRequestHandler):
... def handle(self):
... data, addr_info = self.request[1].recvfrom(65534)
... print data
... print addr_info
... self.request[1].sendto("response", addr_info)
...
>>> f = FooReceiveServer()
>>> f.serve_forever()
request 0
('127.0.0.1', 32884)
request 1
('127.0.0.1', 32884)
request 2
('127.0.0.1', 32884)
request 2
('127.0.0.1', 32884)
request 2
('127.0.0.1', 32884)
### client
>>> target = ('127.0.0.1', 4321)
>>> from socket import *
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> for i in range(10):
... s.sendto("request " + str(i), target)
... s.recv(65534)
...
9
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
KeyboardInterrupt
>>> s.sendto("request " + str(i), target)
9
>>> str(i)
'0'
>>> for i in range(10):
... s.sendto("request " + str(i), target)
... s.recv(65534)
...
9
'response'
9
'response'
9
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
KeyboardInterrupt
>>> #this was hanging, why?
...
>>> s.sendto("request " + str(i), target)
9
>>> s.recv(65534)
'response'
>>> s.sendto("request " + str(i), target)
9
>>> s.recv(65534)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyboardInterrupt
>>> s.sendto("request " + str(i), target)
9
>>> s.sendto("request " + str(i), target)
9
>>> s.recv(65534)
'response'
>>> s.recv(65534)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyboardInterrupt
>>> s.sendto("request " + str(i), target)
9
>>>
--
http://noneisyours.marcher.name
http://feeds.feedburner.com/NoneIsYours
You are not free to read this message,
by doing so, you have violated my licence
and are required to urinate publicly. Thank you.
More information about the Python-list
mailing list