2016-03-08 10 views
0

Во-первых, в SingleSwitchTopo.py я настроил сеть, содержащую 2 хоста и 1 переключатель. Ping и iperf между h1 и h2 в порядке. Затем я разрешаю h1 запускать server.py, он служит в качестве сервера. h2 запускает client.py, он отправляет UDP-пакеты в h1, затем h1 будет принимать данные и записывать в файл. Но почему нельзя h1 получить данные из h2? Как это сделать правильно?Как я могу использовать API-интерфейс Mininet Python для отправки пакетов 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.

Start xterms как для сервера (h1) и клиента (h2) с помощью

xterm h1 h2 

Затем в h1 перспективе

iperf -s -u -i 1 

начать UDP-сервер, который посылает пакеты с интервалом в 1 второй

Тогда в h2 перспективе

iperf -c 10.0.0.1 -u -b 1m -n 1000 

который создает UdP клиента, который подключается к h1 по адресу 10.0.0.1, пропускная способность = 1M, количество байт для транспортировки = 1000

Вот ссылка, показывающая различные Iperf параметров/особенностями http://openmaniak.com/iperf.php

0

Я знаю, это поздний ответ: here есть простое, но эффективное решение.

Большое спасибо Брайану О'Коннору за код.