繁体   English   中英

我如何知道哪个客户端正在将数据传输到我的服务器?

[英]How do I know which client is transferring data to my server?

我已经挖了一段时间了,我已经得到了很好的理解,没有达到我想要做的事情:

我需要一个多个客户端连接的服务器。 客户端每隔一段时间就会向服务器查询一组要处理的新数字(本质上是分布式计算),然后服务器将其发送回查询的客户端。

如何判断哪个客户端查询服务器以便我可以回复它?

我对Python很新,而select()函数本身有点令人困惑。 我能够接受新的连接,并获得输入,但服务器似乎不知道哪个客户端正在与它交谈(或者可能我的调试文本不正确,它确实知道??)。

无论如何,这是服务器的代码:

while running:
    #select returns 3 subsets of the input containing sockets that have stuff to be read, empty buffer for writing, or an error
    readers, writers, error = select.select(input, output, errors)
    for s in readers:
        if s == serversocket:
            #readable server socket is ready for connection
            connection, client_addr = s.accept()
            print >> sys.stderr, 'new connection from', client_addr
            connection.setblocking(0)
            #clients.append([client_addr, performance])
            input.append(connection)
            output.append(connection)
        else:
            #readable socket, not ready for new connection
            data = s.recv(1024)
            print >> sys.stderr, "readable socket, not ready for new connection"
            if data:
                #the socket actually has data (put Compute process data into list)
                print >> sys.stderr, "Data received"
                substring = data[0:data.find("sss")];
                print >> sys.stderr, 'received %s from %s' % (substring, client_addr)
                if substring == "-get":
                    print >> sys.stderr, 'received -get command'
                    determinerange()
                    print >> sys.stderr, 'sending range of %d to %d', currentlow, currenthigh
                    temp = currentlow+"\0"
                    connection.send(currentlow)
                    temp = currenthigh+"\0"
                    connection.send(currenthigh)
                elif substring == "-k":
                    print >> sys.stderr, 'received -k, stopping'

从本质上讲,它接收某种命令,然后转身并发送所需的数据。 如果你想知道,这个服务器必须与我正在编写的C程序交谈,这实际上是在进行计算。 这就是为什么我要添加换行符“\\ 0”字符。 如果它从任何客户端收到-k,它需要停止每个客户端并退出。

注意:我只能使用标准的python库。 我无法获得任何可以让事情变得更容易的额外事情:)

谢谢大家的帮助!

您不需要知道哪个客户端。 套接字是客户端,用于所有意图和目的。 只需通过您收到请求的同一套接字发送响应即可。

尝试更换线条:

                connection.send(currentlow)
                ...
                connection.send(currenthigh)

通过:

                s.send(currentlow)
                ...
                s.send(currenthigh)

这会将消息发送到您收到某些数据的当前客户端,而不是存储在变量连接中的客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM