Python xinetd客户端未接收数据



我试图使用xinetd远程运行命令(tracejob)。当我通过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)行停止。我怎么也说不出是什么原因。Recv没有从套接字读取输出。可能是编码问题?如果有帮助的话,我想。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是上面描述的服务器。

提示吗?

你有一个死锁的情况:客户端发送一个不完整的行并等待服务器发送一些东西,服务器等待行完成或EOF在它发送一个回复。

现在你有两种方法继续

  1. 在发送的字符串后面附加一个n
  2. 在写入之后,在读取之前,用sock.shutdown(socket.SHUT_WR)关闭客户端套接字。

相关内容

  • 没有找到相关文章

最新更新