Сокеты Python не отправляют данные немедленно

Делаю игру на питоне. Он использует сокеты. Это мой первый опыт использования сокетов.

Вот часть моего кода:

serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
serversocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

# get local machine name
host = socket.gethostname()                           

port = 9999                                           

# bind to the port
serversocket.bind((host, port))                                  

# queue up to 5 requests
serversocket.listen(5)                                       

player = 1
keys = []
playerSockets = []
print "Waiting for players..."
while True:
    # establish a connection
    clientsocket, addr = serversocket.accept()

    key = id_generator()
    keys.append(key)

    playerSockets.append(clientsocket)
    clientsocket.send(str(player)+"\r\n")
    clientsocket.send(str(key)+"\r\n")
    print "Player " + str(player) + " connected." 
    player = player + 1

    if player > 3 or currentEpochtime() > endConn:
        break

print str(player-1) + " active players.\n"

if(player < 3):
    print "Not enough Players. Closing..."
    serversocket.close()
    quit()


#Other Stuff Continues

Теперь он отправляет вышеуказанные данные (игрок и ключ) только после того, как в моем коде появится следующий оператор отправки. Но затем этот следующий оператор отправки никогда не отправляется, потому что он ожидает ответа от клиента. Но клиент ничего не отправляет, так как он еще не получил данные от предыдущего оператора отправки на сервере.

Я очень долго пытался найти решение, но не могу этого сделать.

Пожалуйста помоги!


person Sid Prasad    schedule 19.05.2016    source источник
comment
Возможный дубликат множественных клиентов сокета Python   -  person JimmyB    schedule 19.05.2016


Ответы (1)


Не совсем уверен в вашем вопросе, вы имеете в виду, что клиент не может получать информацию с сервера?

Я пытаюсь использовать следующий клиентский код:

import socket

s = socket.socket()
host = socket.gethostname()
port = 9999
s.connect((host, port))
print s.recv(1024)
input = raw_input('type anything and click enter... ')
s.send(input)
print "the message has been sent"

Кажется, что он получает данные, отправленные сервером, и может отправлять данные обратно на сервер.

Это помогает?

person linpingta    schedule 19.05.2016
comment
Я не думаю, что это связано с клиентской стороной. Я думаю, что это сервер, который не отправляет данные. Это многопользовательская игра, поэтому клиентов несколько. Поэтому я не закрываю соединения после принятия. Потому что они мне понадобятся позже. Может ли это быть проблемой? - person Sid Prasad; 19.05.2016