Чтение данных, отправленных из StreamRequestHandler write - PullRequest
2 голосов
/ 15 сентября 2010

У меня есть сервер 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)

Iхочу, чтобы мой клиент мог отправить запрос и получить «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()

Но клиент зависает, когда я пытаюсь это сделать.Куда я иду не так?Также необходимо знать, сколько данных получает сокет recv или есть способ просто получить все данные, которые сервер записывает?

Ответы [ 2 ]

2 голосов
/ 26 января 2012

рядом с январскими ответами, которые я хотел бы упомянуть, если вы хотите получить ваше точное сообщение, вам нужно использовать полосу, чтобы опустить '\ n', который вы поместили в конец вашей строки.

2 голосов
/ 21 августа 2011

Поскольку ваш сервер выполняет self.rfile.readline (), он постоянно читает, пока не получит символ новой строки ("\ n").Таким образом, ваш клиент должен отправить sock.send ("msg \ n"), чтобы он прекратил команду чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...