读取来自StreamRequestHandler的发送数据

3 投票
2 回答
3060 浏览
提问于 2025-04-16 04:10

我有一个叫做SocketServer.StreamRequestHandler的服务器,它会用self.rfile.readline()来读取请求,然后用self.wfile.write(data)来发送一些数据:

class FileServerHandler(SocketServer.StreamRequestHandler):

    def handle(self):
            # self.rfile is a file-like oject created by the handler
            data = self.rfile.readline()
            if data == "msg":
                    self.wfile.write(someOtherData)

我希望我的客户端能够发送请求,并从服务器接收“someOtherData”:

# Create a socket (SOCK_STREAM means a TCP socket)
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect((HOST, PORT))
sock.send("msg")
print sock.recv(1024)
sock.close()

但是当我尝试这样做时,客户端就卡住了。我哪里出错了?另外,知道socket接收到多少数据是必要的吗,还是说有办法直接接收服务器写入的所有数据?

2 个回答

2

除了Jan的回答,我想提一下,如果你想要收到你准确的信息,你需要使用strip这个方法来去掉你字符串末尾的'\n'。这个'\n'是换行符,表示换到下一行。

3

你的服务器在执行 self.rfile.readline() 的时候,它一直在读取数据,直到收到一个换行符 ("\n") 为止。因此,你的客户端需要发送 sock.send("msg\n"),这样才能结束读取的命令。

撰写回答