gpt4 book ai didi

python xinetd客户端未接收数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:28:30 25 4
gpt4 key购买 nike

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

有什么建议吗?提前致谢。

最佳答案

您遇到了死锁情况:客户端发送不完整的行并等待服务器发送某些内容,服务器在发送回复之前等待行完成或 EOF。

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

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

关于python xinetd客户端未接收数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7193738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com