[EMAIL PROTECTED] wrote:
> My server.py looks like this
>
> ---------------------------------------------CODE----------------------------------
> #!/usr/bin/env python
> import socket
> import sys
> import os
>
> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
> host = ''
> port = 2000
>
> s.bind((host,port))
> s.listen(1)
> conn, addr = s.accept()
> print 'client is at', addr
>
> while True:
>       data = conn.recv(1000000)
>       if (data == 'MaxSim'):
>               print 'MaxiSim'
>               os.system('notepad')
>       elif (data == 'Driving Sim'):
>               print 'Driving Sim'
>               os.system('explorer')
>       elif (data == 'SHUTDOWN'):
>               print 'Shutting down...'
>               os.system('shutdown -s')
>               conn.close()
>               break
> -------------------------------------------CODE
> END-------------------------------------
>
> I am running this above program on a windows machine. My client is a
> Linux box. What I want to achieve is that server.py should follows
> instructions till I send a 'SHUTDOWN' command upon which it should shut
> down.
>
> When I run this program and suppose send 'MaxSim' to it, it launches
> notepad.exe fine, but then after that it doesn't accept subsequent
> command.

As others noted, that's because os.system() blocks.
You have more bugs than that.

The recv() might return "MaxiSimDriving Sim". It could return
"MaxiS" on one call, and "im" on the next. If the remote side
closes the connection, recv() will keep returning the empty
string, and your program will be stuck in an infinite loop.

Did you understand Faulkner's suggustion? Anyone who connects to
TCP port 2000 can invoke "shutdown -s" (which I assume shuts down
your host).


-- 
--Bryan

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to