首先,在SingleSwitchTopo.py中,我建立了一个包含2个主机和1个交换机的网络。 h1和h2之间的Ping和iperf都可以。然后我让h1运行server.py,它作为服务器。 h2运行client.py,它将UDP数据包发送到h1,然后h1将接收数据并写入文件。但为什么不能从h2获取数据呢?如何正确地做到这一点?
SingleSwitchTopo.py
from mininet.topo import Topo
from mininet.net import Mininet
from mininet.util import dumpNodeConnections
from mininet.log import setLogLevel
from mininet.node import CPULimitedHost
from mininet.link import TCLink
class SingleSwitchTopo(Topo):
"Single switch connected to n hosts."
def build(self, n=2):
switch = self.addSwitch('s1')
for h in range(n):
host = self.addHost('h%s' % (h + 1), cpu=.6/n)
self.addLink(host, switch, bw=500, delay='10ms', loss=10, max_queue_size=100, use_htb=True)
def simpleTest():
"Create and test a simple network"
topo = SingleSwitchTopo(n=2)
net = Mininet(topo=topo, host=CPULimitedHost, link=TCLink)
net.start()
h1 = net.get('h1')
h2 = net.get('h2')
h1.cmd('kill %python')
h2.cmd('kill %python')
h1.cmd('python server.py &')
h2.cmd('python client.py %s ' % h1.IP())
net.stop()
if __name__ == '__main__':
setLogLevel('info')
simpleTest()
server.py
import socket
address = ('127.0.0.1', 9999)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(address)
f = open('/home/knshen/a.txt', 'w+')
while True:
data, addr = s.recvfrom(1024)
print 'data', data
f.write(data)
f.flush()
f.close()
s.close()
client.py
import socket
import sys
from time import sleep
address = (sys.argv[1], 9999)
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
i = 1
while True:
s.sendto('hi : %d\n' % i, address)
i += 1
sleep(3)
s.close()
答案 0 :(得分:1)
您可以使用iperf命令设置客户端服务器。
使用
启动服务器(h1)和客户端(h2)的xtermsxterm h1 h2
然后在h1中运行
iperf -s -u -i 1
启动一个发送间隔为1秒的数据包的udp服务器
然后在h2中运行
iperf -c 10.0.0.1 -u -b 1m -n 1000
创建一个udp客户端,连接到地址10.0.0.1的h1,带宽= 1M,要传输的字节数= 1000
这是显示各种iperf参数/功能的链接 http://openmaniak.com/iperf.php
答案 1 :(得分:1)
我知道这是一个迟到的答案,here这是一个简单而有效的解决方案。
非常感谢Brian O' Connor的代码。