繁体   English   中英

如何使用Mininet Python API将UDP数据包从一台主机发送到另一台主机?

[英]How can I use Mininet Python API to send UDP packets from one host to another?

首先,在SingleSwitchTopo.py中,我建立了一个包含2台主机和1台交换机的网络。 h1和h2之间的Ping和iperf可以。 然后,我让h1运行server.py,它充当服务器。 h2运行client.py,它将UDP数据包发送到h1,然后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()

您可以使用iperf命令设置客户端服务器。

通过使用为服务器(h1)和客户端(h2)启动xterms

xterm h1 h2

然后在h1中运行

iperf -s -u -i 1 

启动udp服务器,该服务器以1秒的间隔发送数据包

然后在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

我知道答案很晚, 这里有一个简单但有效的解决方案。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM