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

zxo102 zxo102 at gmail.com
Tue Aug 15 04:37:29 EDT 2006


"That twisted example  only accepts one client connection"  if only one
port is available.


zxo102 写道:

> 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