我有一个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()
但是当我尝试这个时,客户端会挂起。我哪里错了?还有必要知道套接字收集了多少数据,或者只是接收服务器写入的所有数据?
答案 0 :(得分:2)
当您的服务器正在执行self.rfile.readline()时,它会一直读取,直到收到换行符(“\ n”)字符。因此,您的客户端需要发送sock.send(“msg \ n”)来终止读取命令。
答案 1 :(得分:2)
在Jan答案旁边我想提一下,如果你想收到你的确切消息,你需要使用strip来删除你放在字符串末尾的'\ n'。