start a multi-sockets server (a socket/per thread) with different ports but same host
zxo102
zxo102 at gmail.com
Tue Aug 15 04:32:59 EDT 2006
Bryan,
Thanks for your note. Finally, I have made "one listener socket for
all the connections" work plus Queue-communication between the threads
in wxpython Gui and the threads for socket connections.
Trying to make that twisted example code in this topic for "one
listener socket-all the connections" but failed. That twisted example
only accepts one client connection. I have printed out the Twisted help
file (256 pages). Too much to read.
Ouyang
Bryan Olson 写道:
> 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