Я пытаюсь изучить Python-сокеты и попал в ловушку с помощью метода socket.accept (). Как я понимаю метод, когда я вызываю accept, поток будет сидеть и ждать входящего соединения (блокируя весь следующий код). Тем не менее, в коде ниже, который я получил от https://docs.python.org/2/library/socket.html и использую localhost. Я добавил печать ('привет') в первую строку сервера. Тем не менее, печать не появляется, пока я не отключу клиента. Почему это? Почему после того, как я связал сокет, кажется, что accept работает до моей печати?
# Echo server program
import socket
print('hello') # This doesn't print until I disconnect the client
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(1024)
if not data: break
conn.sendall(data)
conn.close()
# Echo client program
import socket
HOST = 'localhost' # The remote host
PORT = 50007 # The same port as used by the server
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
s.sendall('Hello, world')
data = s.recv(1024)
s.close()
print 'Received', repr(data)