簡體   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