Python套接字仅在从RenciSSH调用时超时.网络会议
本文关键字:超时 网络 会议 调用 RenciSSH 套接字 Python | 更新日期: 2023-09-27 18:13:45
我有一个python 3.4脚本,它与远程主机建立套接字连接,发送数据,并从远程主机获得'OK'消息。如果直接从我的Ubuntu服务器14.04上的终端执行,它运行得很好。以下是python脚本的相关部分:
try:
sock = socket.socket()
sock.settimeout(15)
sock.connect(("10.191.0.2", 6874))
dataSend = "<request>" + command + "</request>"
sock.send(dataSend.encode('utf_8'))
dataRecv = sock.recv(512).decode('utf_8')
if dataRecv and "'OK'" in dataRecv:
return "OK"
else:
return "Error."
except socket.timeout as err1:
return "Error:" + str(err1)
except socket.error as err2:
return "Error:" + str(err2)
finally:
sock.close()
但是,如果我通过Renci SSH运行这个。从第三台主机发起的Net会话,我在socket.connect()上得到超时。
这里是c#/Renci代码(我使用SSH。Net version 2106.0.0)
using (var sshClient = new SshClient(host, user, keyfile))
{
sshClient.Connect();
SshCommand cmd = null;
try
{
sshClient.ConnectionInfo.Timeout = TimeSpan.FromSeconds(timeOut);
cmd = sshClient.RunCommand(command);
}
catch (SshOperationTimeoutException timeoutex)
{
Trace.TraceError(string.Format("SshOperationTimeoutException executing command '"{0}'" on {1}: {2}", command, sshClient.ConnectionInfo.Host, timeoutex.ToString()));
}
catch (SshException ex)
{
Trace.TraceError(string.Format("SshException executing command '"{0}'" on {1}: {2} ", command, sshClient.ConnectionInfo.Host, ex.ToString()));
}
}
我被难住了,为什么这在本地运行良好,而不是通过SSH。网络会议。有人有什么建议吗?
谢谢,格雷格
好的,我找到问题了。我的Python方法被标记为@staticmethod。删除此属性后,代码可以在SSH上正常运行。网络会议。
如果有人想评论为什么会这样,我洗耳恭听。