Ich habe eine client.py und eine server.py. Der Client empfängt gelegentlich Nachrichten vom Server. Der Client kann auch Nachrichten an den Server senden.Drucken zur Konsole und raw_input zur gleichen Zeit
Da raw_input den Hauptthread zu blockieren scheint, kann der Client, wenn er vom Server eine Nachricht erhält, nicht auf die Konsole drucken und benötigt raw_input, um als Erster fertig zu sein.
Ich habe versucht, Multithreading zu verwenden, um dies zu umgehen, aber im folgenden Code wird der Raw_input nicht einmal aufgerufen. Folgendes ist client.py
import socket
import sys
import threading
BUFFER_SIZE = 1024
def listen_for_server_response(s):
while 1:
data = s.recv(BUFFER_SIZE)
print(data)
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((sys.argv[1], int(sys.argv[2])))
thread = threading.Thread(target = listen_for_server_response(s))
thread.start()
while 1:
command = raw_input("Command: ")
s.send(command)
if __name__ == "__main__":
main()
Jede Hilfe zu diesem wird sehr geschätzt!
Wenn Sie denken, dass es schlecht entworfen ist, bin ich glücklich, einen anderen Weg zu versuchen. Was schlagen Sie vor? – cph2117
Sie sollten wahrscheinlich Verwünschungen (wenn Sie auf einem Terminal bestehen) oder verwenden Sie eine ordnungsgemäße gui ... –
+1, aber ich würde gegen den "schlechten Design" -Teil argumentieren. Wenn Ihr Ziel ist, nur auf dem Bildschirm zu echo dies ist in Ordnung (IMHO). – tdelaney