у меня возникли проблемы с попыткой отправить данные всем клиентам, подключенным к моему серверу чата tcp python. Я знаю, как отправить сообщение/данные обратно тому, кто его отправил, но оно просто не будет отправлено обратно, если у меня несколько клиентов. это мой сервер до сих пор:
host = '127.0.0.1'
port = 4446
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind( (host, port) )
s.listen(backlog)
clients = [s]
while 1:
inputReady, outputReady, exceptReady = select.select(clients, [], [])
for x in inputReady:
if x == s:
csock, addr = s.accept()
clients.append(csock)
else:
data = x.recv(size)
if data:
for i in clients: #problem i believe is in here but i
i.send(data) #dont know how to fix it
else:
x.close()
clients.remove(x)
s.close()
я использую node.js для клиентской стороны, и пока это очень просто, и я не думаю, что это проблема:
var net = require('net');
var readline = require('readline');
var host = process.argv[2];
var port = process.argv[3];
var username = process.argv[4];
var client = new net.Socket();
client.connect(port, host, function(){
var type = "connect";
var sender = username;
var msg = "has connected";
var s = type + ':' + sender + ':' + msg;
var length = s.length;
client.write(length + " " + s);
});
client.on('data', function(data){
console.log(data.toString('UTF-8'));
});
send
. Прочтите документацию по этому методу, чтобы узнать, почему это необходимо. Вы также используете блокирующие сокеты, что означает, что ваш сервер может обрабатывать данные только настолько быстро, насколько их может обрабатывать самый медленный клиент. Вы можете заглянуть на twistedmatrix.com, чтобы узнать о более простом подходе к сетевому программированию на Python (это похоже на Node. js для Python!) - person Jean-Paul Calderone   schedule 11.02.2014