start a multi-sockets server (a socket/per thread) with different ports but same host

Bryan Olson fakeaddress at nowhere.org
Sun Aug 13 01:52:08 EDT 2006


zxo102 wrote:
>    I am doing a small project using socket server and thread in python.
>  This is first time for me to use socket and thread things.
>    Here is my case. I have 20 socket clients.  Each client send a set
> of sensor data per second to a socket server.  The socket server will
> do two things: 1. write data into a file via bsddb; 2. forward the data
> to a GUI written in wxpython.
>    I am thinking the code should work as follow (not sure it is
> feasible)
>       20 threads, each thread takes care of a socket server with a
> different port.
>    I want all socket servers start up and wait for client connection.
> In the attached demo code, It stops at the startup of first socket
> server somewhere in the following two lines and waits for client call:
> 
>    lstn.listen(5)
>    (clnt,ap) = lstn.accept()

It will block there, waiting for connection.

>   Any ideas how to handle these 20 clients?  Really appreciate your
> suggestions.

One reserved port for each client strikes me as whacked,
as does coding a server to handle exactly 20 of them. Since
you say this is your first socket server, maybe you just
haven't seen the usual techniques.

Normally, one listener socket accepts all the connections.
Each call to accept() returns a new, independent socket for the
connection. You can then start a thread to handle the new
socket. Untested:


   listener = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   listener.bind(('', 2000))
   listener.listen(5)
   while True:	             # or some should_continue() thing
       sock, _ = listener.accept()
       thread.start_new_thread(service_function, (sock,))
       # Or start threads via class Threading


To update the GUI, you could use the Queue from the Python
library, and call wxPostEvent to tell the GUI go wake up and
check the queue.


-- 
--Bryan



More information about the Python-list mailing list