Asp Forum
Home
|
Login
|
Register
|
Search
Forums
>
comp.lang.python
UDP Client/Server
Martin Marcher
1/22/2008 10:58:00 PM
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.ma...
http://feeds.feedburner.com/N...
You are not free to read this message,
by doing so, you have violated my licence
and are required to urinate publicly. Thank you.
Servizio di avviso nuovi messaggi
Ricevi direttamente nella tua mail i nuovi messaggi per
UDP Client/Server
Inserendo la tua e-mail nella casella sotto, riceverai un avviso tramite posta elettronica ogni volta che il motore di ricerca troverà un nuovo messaggio per te
Il servizio è completamente GRATUITO!
x
Login to ForumsZone
Login with Google
Login with E-Mail & Password