【问题标题】:python tcp server sending data to multiple clientspython tcp服务器向多个客户端发送数据
【发布时间】:2014-03-08 13:54:51
【问题描述】:

我在尝试向连接到我的 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)
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 中进行网络编程的更简单方法(就像 Python 的 Node.js!)

标签: python networking tcp network-programming tcpserver


【解决方案1】:

问题是您在所有套接字上发送,包括服务器套接字。忽略其他潜在问题,您可以通过以下方式快速修复:

       for i in clients:
          if i is not s:
            i.send(data)

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 2021-02-21
    • 2019-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-10
    • 1970-01-01
    • 2017-07-10
    • 2019-01-01
    相关资源
    最近更新 更多