[英]How to send and receive message from client to client with Python (socket)?
[英]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.