клиент Python Xinetd не получает данные

1

Я пытаюсь использовать xinetd для удаленного запуска команды (traccejob). Когда я подключаюсь через telnet, все работает нормально. К сожалению, клиент, который я написал, похоже, не получает данные с сервера. Код выглядит так:

сервер:

import sys
import commands

def main():
        tjinput = sys.stdin.readline().strip()
        (ret, out) = commands.getstatusoutput('/usr/bin/tracejob '+tjinput)
        print out
        sys.stdout.flush()

if __name__ == "__main__":
        main()

клиент:

host = 'xxx.xxx.xxx.xxx'
port = 12345

import socket
import sys


def main(argv):
        message = 'hello'
        sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        sock.connect((host, port))
        sock.send(message)
        data = sock.recv(1024)
        sock.close()
        print repr(data)

if __name__ == '__main__':
        main(sys.argv)

Процесс клиента останавливается на строке sock.recv(1024). Я не могу, чтобы жизнь меня рассказывала, почему sock.recv не читает вывод из сокета. Возможно, проблема с кодировкой? Если это помогает, файл xinetd.d выглядит так:

service tracejob
{
        flags                   = IPv4
        disable                 = no
        socket_type             = stream
        wait                    = no
        user                    = root
        group                   = root
        server                  = /usr/local/bin/tracejob_xinetd.py
        port                    = 12345
        type                    = UNLISTED
}

где tracejob_xinetd.py - сервер, описанный выше.

Какие-нибудь советы? Заранее спасибо.

Теги:
xinetd

1 ответ

1
Лучший ответ

У вас ситуация с тупиком: клиент отправляет неполную строку и ожидает, что сервер отправит что-то, сервер ждет завершения строки или EOF, прежде чем отправит ответ.

Итак, теперь у вас есть 2 способа действовать сейчас:

  1. Добавьте \n к отправляемой строке.
  2. "Закройте" сокет на стороне клиента с помощью sock.shutdown(socket.SHUT_WR) после записи, но перед чтением.
  • 0
    Аааа, нет новой строки в конце строки. Спасибо за совет, что сработало!
  • 0
    glglgl, действительно борющийся с чем-то подобным, мог бы воспользоваться вашим советом. Кайл сказал, что с telnet все просто работает (это мой точный сценарий, которого я пытаюсь достичь). на основании этого поста у меня не установлен серверный скрипт одинаково, мне интересно, не в этом ли проблема? stackoverflow.com/questions/47244913/...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню