繁体   English   中英

如何使用套接字发送和接收整个文本消息(而不仅仅是一部分)

[英]How to send and receive whole text message (not just a part) using socket

我正在尝试使用SocketServer创建一个非常简单的(行)服务器。 我是这方面的新手,问题是我不知道如何处理recv函数。 我不想发送文件或类似的东西。 仅来自客户端的书面文本和来自服务器的响应可能更大(ipconfig等的输出)

您能给我一个建议如何使它工作吗?

当我想从服务器请求更长的时间时,例如ipconfig /all ,它将返回所需输出的一部分给我的客户端并等待。 如果作为客户端执行新请求,它将返回前一个请求的其余输出。

这是服务器:

class ThreadedTCPServer(SocketServer.ThreadingMixIn, SocketServer.TCPServer):
    daemon_threads = True


class ThreadedTCPRequestHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        while 1:
            data = self.request.recv(1024)
            output = process_command(data)

            response = "{}".format(output)
            self.request.sendall(response)


if __name__ == "__main__":

    HOST, PORT = _host, int(_port)

    server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)

    print "Running on: %s:%s" % (HOST, PORT)
    server.serve_forever()

在该行中:

data = self.request.recv(1024)

1024是数据字符串可以包含的位数的限制器,因此1024位== 128字节== 128字符串。 将数字增加到4096,然后将限制增加到512。

有几个问题。

  • recv是一个低级功能,您可能会在几个需要结合在一起的块中收到TCP客户端的输入。 如果您的“协议”是面向行的,请使用makefile创建类似文件的对象,然后可以使用readline读取整行。

  • 问题可能出在process_command ,请显示您的代码。

  • 您的循环不处理EOF(客户端关闭)。

暂无
暂无

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

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