python tcp服务器向多个客户端发送数据
我在尝试向python tcp聊天服务器上连接的所有客户端发送数据时遇到问题。我知道如何将消息/数据直接发送回发送它的人,但如果我有多个客户端,它就不会发送回。到目前为止,这是我的服务器:python tcp服务器向多个客户端发送数据,python,networking,tcp,network-programming,tcpserver,Python,Networking,Tcp,Network Programming,Tcpserver,我在尝试向python tcp聊天服务器上连接的所有客户端发送数据时遇到问题。我知道如何将消息/数据直接发送回发送它的人,但如果我有多个客户端,它就不会发送回。到目前为止,这是我的服务器: 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) clie
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'));
});
问题是您正在发送所有套接字,包括服务器套接字。忽略其他潜在问题,您可以通过执行以下操作快速修复:
for i in clients:
if i is not s:
i.send(data)
你的发送代码中有一个你没有注意到的错误。您忘记检查
send
的返回值。阅读该方法的文档,了解为什么需要这样做。您还使用了阻塞套接字,这意味着您的服务器只能以最慢的客户端处理数据的速度处理数据。您可能想看看用Python进行网络编程的更简单的方法(就像Python的Node.js!)