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