У меня есть этот простой серверный скрипт. Моя цель для этого сценария:Python Socket (простой серверный скрипт)
- Дождитесь подключениями клиента
- не получающих массажа от клиента до отсоединения клиента
- После отключения клиента, ждать другого клиент для подключения
- не получают массаж до клиента отключить
- Repeat ...
import socket
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",5000))
server_socket.listen(5)
print "Awaiting Client connection"
client_socket, address =server_socket.accept()
print "Connection established.. with ",address
while True:
data=client_socket.recv(512)
if not data:
client_socket.close()
print "Client disconnected, Awaiting new connections..."
client_socket, address =server_socket.accept()
print "Connection from ",address
else:
print "RECIEVED:",data
Мой вопрос даже при том, что сценарий, кажется, работает, когда я протестировать его на пару ПК, я заметил, что после того, как он получил сообщение от клиента, то есть line no 7
print "Connection established.. with ",address
окно оболочки python кажется невосприимчивым (не реагируйте, если я пытаюсь переместить окно оболочки), пока клиент не отправит какое-либо сообщение.
Насколько я понимаю, если от клиента нет входящего сообщения, client_socket.recv(512)
будет просто ждать данных от клиента.
Но почему это стало неактуальным? Для того, чтобы прояснить ситуацию,
-The скрипт работает нормально (это получить данные и распечатать его с экрана & ожидания для нового соединения, если разъединение клиента)
-The курсора в консоли окна перестанут мигать
-когда я пытаюсь переместить окно консоли вокруг, он перестает отвечать на запросы и окна дают мне сообщение «эта программа не отвечает»
Параметр 'метод recv' блокирует - см http://stackoverflow.com/questions/9770567/python-tcp-socket-blocks-on-recv-method. – leon