import asyncore, socket class AsyncoreServerUDP(asyncore.dispatcher): def __init__(self): asyncore.dispatcher.__init__(self) # Bind to port 5005 on all interfaces self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.bind(('', 5005)) # Even though UDP is connectionless this is called when it binds to a port def handle_connect(self): print "Server Started..." # This is called everytime there is something to read def handle_read(self): data, addr = self.recvfrom(2048) print str(addr)+" >> "+data # This is called all the time and causes errors if you leave it out. def handle_write(self): pass AsyncoreServerUDP() asyncore.loop()
import socket, asyncore class AsyncoreClientUDP(asyncore.dispatcher): def __init__(self, server, port): asyncore.dispatcher.__init__(self) self.server = server self.port = port self.buffer = "" # Network Connection Magic! asyncore.dispatcher.__init__(self) self.create_socket(socket.AF_INET, socket.SOCK_DGRAM) self.bind( ('', 0) ) # bind to all interfaces and a "random" free port. print "Connecting..." # Once a "connection" is made do this stuff. def handle_connect(self): print "Connected" # If a "connection" is closed do this stuff. def handle_close(self): self.close() # If a message has arrived, process it. def handle_read(self): data, addr = self.recv(2048) print data # Actually sends the message if there was something in the buffer. def handle_write(self): if self.buffer != "": print self.buffer sent = self.sendto(self.buffer, (self.server, self.port)) self.buffer = self.buffer[sent:] connection = AsyncoreClientUDP("127.0.0.1",5005) # create the "connection" while 1: asyncore.loop(count = 10) # Check for upto 10 packets this call? connection.buffer += raw_input(" Chat > ") # raw_input (this is a blocking call)