Errno 111连接被拒绝-Python Mininet API主机客户端/服务器没有连接?
我是Mininet的新手,我正在试图找到一种方法,使用python中的脚本来执行一些使用Mininet的测试。更确切地说,我希望构建拓扑并从一个主机向另一个主机发送一些Errno 111连接被拒绝-Python Mininet API主机客户端/服务器没有连接?,python,subprocess,mininet,errno,Python,Subprocess,Mininet,Errno,我是Mininet的新手,我正在试图找到一种方法,使用python中的脚本来执行一些使用Mininet的测试。更确切地说,我希望构建拓扑并从一个主机向另一个主机发送一些xmlrpc请求。我最近发现了如何使用mininetapi。问题是我无法从客户端连接到服务器以获得响应,我已使用客户端主机发出的telnet 10.0.0.x 12345命令进行了测试,并得到了连接拒绝。代码如下: 拓扑测试.py server.py 向主机执行服务器/客户端脚本 如果我使用不同的xterm窗口运行mininetc
xmlrpc
请求。我最近发现了如何使用mininetapi
。问题是我无法从客户端连接到服务器以获得响应,我已使用客户端主机发出的telnet 10.0.0.x 12345
命令进行了测试,并得到了连接拒绝。代码如下:
拓扑测试.py
server.py
向主机执行服务器/客户端脚本
如果我使用不同的xterm
窗口运行mininetcli
中的所有内容,但当使用mininetapi
时,没有任何东西正常工作,那么我也尝试了一些不同的客户端/服务器脚本,有时它工作正常。实际上,它只在第一次运行时起作用。所以我在想,也许有一种方法可以使用子流程
打开xterm
窗口,然后在xterm
内部运行一个命令,其中包含一些管道子流程
。我希望所有内容都通过python脚本运行,而不是手动运行。有人能帮我吗?为什么不使用mininet的python接口来实现这一点?从您的问题来看,您似乎希望获得默认情况下sudo mn
创建的节点的名称
在这种情况下,为什么不在python中添加以下内容:
from mininet.topo import SingleSwitchTopo
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
if __name__ == '__main__':
topo = SingleSwitchTopo()
net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink)
net.start()
nodes = net.items()
node_names, _ = zip(*nodes)
print(node_names)
net.stop()
SingleSwitchTopo是mn默认使用的一个(两台主机连接到一个交换机)net.items()
提供节点名称和ID的元组,请参见。也许我误解了你的问题,但似乎在有API的情况下试图通过子流程访问它,这会使原本简单的任务过于复杂。最后,我找到了导致客户端尝试连接到服务器时连接被拒绝的原因。从好的方面来说,这是一件“疯狂”的事情;)
我刚刚意识到,当客户端发出请求时,服务器并没有准备好并运行,这仅仅是因为两个执行命令同时启动。因此,我在调用/执行cmd行之间添加了一个延迟,如下所示:
host1.sendCmd("python3 server.py")
sleep(5)
host2.cmdPrint("python3 client.py")
额外意见:
重要的一点是,当运行net.stop()
时,sendCmd()
会给出一个断言wait
错误。文档中说在sendCmd()
之后和net.stop()
之前使用host1.monitor()
,但它不起作用。因此,我将sendCmd()
替换为popen()
,然后使用terminate()
,现在一切都好了 实际上,我想运行host1xterm
并使用xmlrpc
运行一些测试/基准测试,我想从外部环境使用rpc客户机/服务器脚本中的主机IP。nodes命令只是我使用的一个例子。我的目标是自动化这个过程,因此我不需要一步一步地运行它,我需要一个脚本来构建mininet拓扑,然后运行h1 xterm
,然后在mininet之外执行python脚本。您可以使用上面的方法来实现这一点。将不需要Xterm,因为执行host.cmd(“”
将具有相同的效果。您还可以捕获它的输出。看一看API我已经详细地更新了这个问题,API出了问题—什么都不起作用—但使用CLI—一切正常—这就是为什么我考虑使用subprocess xterm方法的原因
import xmlrpc.client as cl
addr = "10.0.0.2"
port = 8100
# rhost = xmlrpclib.Server("http://" + addr + ":" + str(port))
rhost = cl.Server("http://" + addr + ":" + str(port))
# msg = rhost.str_get()
# print(msg)
# inp = ""
print("Guess a number between 1 and 100")
print()
while 1:
# msg = rhost.str_get()
# print(msg)
inp = input(">")
msg = rhost.guess_number(int(inp))
print(msg)
if "found" in msg:
sys.exit(0)
host1.sendCmd("python3 server.py")
host2.cmdPrint("python3 client.py")
from mininet.topo import SingleSwitchTopo
from mininet.net import Mininet
from mininet.node import CPULimitedHost
from mininet.link import TCLink
if __name__ == '__main__':
topo = SingleSwitchTopo()
net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink)
net.start()
nodes = net.items()
node_names, _ = zip(*nodes)
print(node_names)
net.stop()
host1.sendCmd("python3 server.py")
sleep(5)
host2.cmdPrint("python3 client.py")