Когда вы выполняете makefile () в сокете и затем используете readlines () для него, оно будет продолжаться до тех пор, пока вы не достигнете конца файла, что в случае сокета означает, что он закрыт с другого конца.
Использование makefile () в этом случае не имеет смысла для меня, тем более что вы создаете его и закрываете после каждой команды. Просто используйте send () и recv () на обоих концах.
Вы, вероятно, также хотите иметь какой-то фактический «протокол», чтобы сервер сказал клиенту «ЗДЕСЬ ОТВЕТ» и «ЭТО КОНЕЦ ОТВЕТА», чтобы клиент знал. В противном случае становится трудно понять, когда прекратить ждать ответа. :)
Обновление с примером, который работает:
server.py:
import sys, os, socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('', 50500))
print("Server started")
s.listen(1)
while True:
print "Accepting"
conn, addr = s.accept()
print 'New connection from ', addr
while True:
try:
rc = conn.recv(1024)
print "Command", rc
if not rc.strip():
continue
if rc.strip() == 'END':
print "Close"
conn.send("**END**")
conn.close()
break
else:
conn.send("This is the result of command %s\n" % rc)
except Exception:
conn.close()
sys.exit()
client.py
import sys, os, socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 50500))
while True:
cmd = raw_input('$ ')
s.send(cmd)
result = s.recv(1024)
print result
if result == "**END**":
print "Ending"
break