Słuchanie z gniazda Python

Wszystkie wymienione poniżej są na komputerach z systemem Windows za pomocą Pythona 2.7

Dzień dobry,

Obecnie próbuję nasłuchiwać na gnieździe danych wysyłanych przez zdalny program. Dane te są następnie drukowane na ekranie, a dane wejściowe użytkownika są wymagane, a następnie zwracane do zdalnego programu. W testach mogłem mieć zdalny program wysyłający mi menu programów wiersza poleceń (cmd, ipconfig, whoami, ftp), a następnie mój program zwraca liczbę jako wybór opcji menu.

Program zdalny odbiera moją odpowiedź i wysyła dane wyjściowe wybranego polecenia. ipconfig i whoami działają idealnie, ale cmd i ftp zwracają dane wyjściowe tylko raz. (Np. Mogę wprowadzić jedno polecenie do programu FTP i wysłać ten program zdalny, zanim nigdy nie usłyszę odpowiedzi)

Ta część mojego kodu, która się nie powiedzie, to taif ready[0]: nigdy nie staje się gotowy po raz drugi po pierwszej rozmowie.

Wiem, że zdalny program działa poprawnie, ponieważ mogę użyć netcata do działania zamiast mojego kodu i obsługiwać terminal cmd w nieskończoność.

Jak mam właściwie zaimplementować nasłuchiwanie gniazda Pythona, które może uwzględniać ten typ połączenia?

Mój „program” w całości:

import socket, sys, struct, time, select

host = ''
port = 50000
connectionSevered=0

try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error:
    print 'Failed to create socket'
    sys.exit()
print '[+] Listening for connections on port '+str(port)+'.'

s.bind((host,port))
s.listen(5)         

def recvall(the_socket,timeout=2):
    global connectionSevered
    data='';          # Data found by recv
    total_data=[];    # Finally list of everything

    s.setblocking(0)  #make socket non blocking
    begin=time.time() #beginning time

    while 1:
        ready = select.select([client], [], [], .2)
        if time.time()-begin > timeout:
            print 'Timeout reached'
            #Leave loop, timer has reached its threshold
            break
        if ready[0]:
            print 'In ready loop!'
            try:
                data = client.recv(4096)    #attempt to fetch data
                if data:
                    begin=time.time()       #reset timeout timer
                    total_data.append(data) 
                    data='';
            except socket.error:
                print '[+] Lost connection to client. Printing buffer...'
                connectionSevered=1   # Let main loop know connection has errored
                pass
        time.sleep(1)
    #join all parts to make final string
    return ''.join(total_data)

client, address = s.accept()
print '[+] Client connected!'

while (connectionSevered==0): # While connection hasn't errored
    print "connectionSevered="+str(connectionSevered) # DEBUG
    recvall(s)
    response = raw_input()                  #take user input
    client.sendto(response)                   #send input
client.close(0)

Daj mi znać, jeśli potrzebujesz więcej informacji, każda pomoc byłaby bardzo mile widziana, jestem bardzo nowa i chętna do nauki.

questionAnswers(2)

yourAnswerToTheQuestion