2016-03-08 140 views
0

首先,在SingleSwitchTopo.py中,我建立了一个包含2台主机和1台交换机的网络。 ping和h1和h2之间的iperf都可以。然后我让h1运行server.py,它充当服务器。 h2运行client.py,它将UDP数据包发送给h1,然后h1将接收数据并写入文件。但为什么不能H1从H2获取数据?如何正确执行此操作?如何使用Mininet Python API将UDP数据包从一台主机发送到另一台主机?

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

可以使用的iperf命令设置客户端服务器。通过在H1运行使用

xterm h1 h2 

然后

开始的xterms用于服务器(H1)和客户端(H2)

iperf -s -u -i 1 

开始,其与为1的时间间隔发送的分组的UDP服务器第二

然后在下半年运行

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

0

我知道一个链接这是一个迟到的答案,here有一个简单但有效的解决方案。

非常感谢Brian O'Connor的代码。

相关问题