Я пишу код сервера для прослушивания информации из сокета, но когда я нажимаю букву P, я должен отправить клиенту сообщение «Сообщение». Вот то, что я сделал до сих пор:Python select for blocking
import select
import Queue
import socket
import time
import sys
import msvcrt
from msvcrt import getch
n = 0
HOST = ''
PORT = 2323
servsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
servsock.bind((HOST, PORT))
servsock.listen(5)
servsock.setblocking(0)
inputs = [servsock]
outputs = []
message_queues = {}
while 1:
(sread, swrite, serr) = select.select(inputs, outputs, []);
for sock in sread:
if sock is servsock:
(newsock, address) = servsock.accept()
newsock.setblocking(0)
print "New connection: ", address
inputs.append(newsock)
newsock.send("You are connected")
outputs.append(newsock)
else:
recv_msg = sock.recv(100)
if recv_msg == "":
(host, port) = sock.getpeername()
print "Client %s:%s disconnected" % (host,port)
sock.close()
inputs.remove(sock)
outputs.remove(sock)
else:
(host, port) = sock.getpeername()
print "Client %s:%s sent: %s "% (host,port,recv_msg)
for sock in swrite:
while msvcrt.kbhit():
if msvcrt.getch() == "p":
sock.send("Message")
Но выглядит выбор достигает swrite, входит туда, но тогда он не перебирает больше между SREAD и swrite. Если я нажму «1» в любое время, он действительно отправит в сокет «Сообщение», но он никогда не вернется к песку! Мне просто нужно читать для ввода сообщений все время, а когда я нажимаю клавишу P для отправки «сообщения», не блокируя остальную часть программы.
Не могли бы вы помочь мне? Thanks
На самом деле я записал программу «Клиент», которая постоянно отправляет на этот сервер информацию, поэтому, если выбор работает так, как я ожидаю и читаю снова, он должен найти эту информацию. На самом деле, я могу быть уверен, что часть sread не работает, потому что я ничего не получаю. Идея, стоящая за сверкающей частью, заключается в том, что когда я нажимаю P, программа знает, что она должна отправить обратно клиенту сообщение «Сообщение». –