python xinetd客户端没有接收数据

时间:2011-08-25 16:13:36

标签: python xinetd

我正在尝试使用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是上述服务器。

任何提示?提前谢谢。

1 个答案:

答案 0 :(得分:1)

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

所以你现在有2种方法可以继续:

  1. \n附加到要发送的字符串。
  2. 写完后,在阅读之前,在客户端使用sock.shutdown(socket.SHUT_WR)“半关闭”套接字。