Thank you both for the suggestions! Eventually I tried with threading as illustrated in the code below. And it works pretty well! The only problem I'm having with it is that as the server is a daemon the program should end when the client thread cease to be alive. But it doesn't seem to work that way and I'm not sure what's going on! I did achieve my objective though. Two separate instances of the code below will happily send random numbers to each other for a few seconds!
Manu ------------------------- To use the following code, cut&paste into two separate *.py files and invert the port numbers in one file. Then, start them in two separate shells. WARNING: as mentioned above the two program do not exit and must be killed, i.e. through the Windows Task Manager or the unix kill command. ------------------------- import SocketServer import socket import threading import random from time import sleep ## Network request handler class MyTCPHandler(SocketServer.StreamRequestHandler): def handle(self): self.data = self.rfile.readline().strip() print "-> RECV: " + self.data + " - Sent by:" + self.client_address[0] ## Server Thread class AsyncServer(threading.Thread): def __init__(self, localServer): threading.Thread.__init__(self) self.server = SocketServer.TCPServer(localServer, MyTCPHandler) def run(self): self.server.serve_forever() ## Client Thread class AsyncClient(threading.Thread): def __init__(self, remoteServer): threading.Thread.__init__(self) self.remoteServer = remoteServer def run(self): cycle = 0 while cycle < 1000: chance = random.random() if(chance < 0.01): randomNumber = int(random.random() * 1000) message = str(randomNumber) + " from remote cycle " + str(cycle) try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(self.remoteServer) sock.send(message + "\n") sock.close() print("SENT ->: "+str(randomNumber)+ " by local cycle "+str(cycle)) except: print("Failed to send number on cycle "+str (cycle)) pass cycle += 1 sleep(0.01) ## Simulating local/remote servers with different ports localServer = ("localhost", 9999) remoteServer = ("localhost", 10000) asyncServer = AsyncServer(localServer) asyncServer.daemon = True asyncServer.start() asyncClient = AsyncClient(remoteServer) asyncClient.start() -- http://mail.python.org/mailman/listinfo/python-list