client server socket interaction (inetd)
martin at address-in-sig.invalid
Thu Feb 17 14:41:07 EST 2011
On Thu, 17 Feb 2011 08:14:36 -0800, Tim wrote:
> Hi, I have an inetd service on freebsd that calls a program (daemon.py)
> with which I want the remote user to communicate. I can call daemon.py
> from the command line on the host machine and it works fine.
> What I don't understand is how to make my remote client script actually
> communicate. If I'm understanding correctly, the code below just takes a
> message and sends it to inetd and writes the stdout from the process to
> the client.
> How can I modify the code to send a response back?
The code you've shown would appear to be doing what you've specified,
though only you can know whether this is what you intended.
Each time you run the client it:
- connects to the server
- sends a request
- reads the response(s)
- closes the socket and exits.
If you run it a second time it should do the same again. Is this the case?
An inetd server should be started when a connection request is received.
It should read requests, sending a response to each request in turn,
until the connection is closed, when it will be stopped by inetd.
Without seeing the code for the server and the corresponding inetd
configuration line its not possible to say more.
BTW, I prefer xinetd to inetd - its configuration is much more modular
and easier to understand. If freebsd supports xinetd it may make life
easier if you use it rather than inetd.
Here's the outline
> of what I want to do:
> (1) client sends the message to the server (client -> inetd ->
> (2) client receives output back from the server, (3) client user
> responds to a question from the remote process (4) client continues to
> receive output back.
> where 2-3-4 happen as needed by the remote process. Cries out for a
> while loop doesn't it? I just don't know what to put in it. Currently I
> just have steps 1 and 2 working. Client sends one message and gets all
> output back. If server asks a question, processes deadlock with server
> waiting and client unable to respond. thanks,
> --Tim Arnold
> # imports, constants set
> #def line_buffer(sock):
> # code to yield the string response in # blocks of 1024 bytes
> def client(ip,port,message):
> sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
> for line in line_buffer(sock):
> print line
> if __name__ == '__main__':
> message = ' '.join(sys.argv[1:]) )
> print 'working... %s %s' % (SERVER_IP,SERVER_PORT)
> client(SERVER_IP,SERVER_PORT,message) print 'done.'
martin@ | Martin Gregorie
gregorie. | Essex, UK
More information about the Python-list