结束iperf3服务器

Ending iperf3 server

基于 this 答案,如何在 iperf3 中完成此操作。通过 iperf3 手册页和文档,似乎 -t 选项不再存在。在一段时间后或者如果一段时间内没有客户端存在,我可以实施哪些其他方法来终止服务器进程?有没有比 运行 在后台使用 bash 脚本在一定时间后终止服务器更好/更简单的方法?

目前没有办法让 iperf3 服务器在一段时间后或者没有客户端时死机。

您发布的 link 提到希望在测试后完成 iperf2 端点。 iperf3 支持 --one-off 标志,使服务器最多进行一次测试并退出。

对于 iperf2,-t 将在无流量 t 秒后终止侦听器。它还会将服务器线程限制为 t 秒,而不管客户端的 -t 时间。如果给出 -d,则 -t 仅适用于服务器流量线程,iperf 侦听器将保留。

另一种在测试后终止侦听器的选项是在服务器命令行上设置 -P 1

鲍勃

https://sourceforge.net/projects/iperf2/

解决此问题的一种方法是,如果您在一段时间后未获得连接或客户端连接超时。您可以尝试建立服务器到服务器的连接。这加上 1 关闭选项将关闭服务器。

示例使用 python2:

import subprocess
import time
import numpy as np

iperf_location = r'C:\Users\iperf3.exe'

server_IP = '192.168.0.10'
client_IP = '192.168.0.11'

server_command = iperf_location + ' -s -B ' + server_IP + ' --one-off'
client_command = iperf_location + ' -c ' + server_IP + ' -B ' + client_IP

#this command does a server to server connection. This way the server will close out correctly
#in the event that the client cannot connect
fail_command = iperf_location + ' -c ' + server_IP + ' -B ' + server_IP

subprocess.Popen(server_command)
time.sleep(1)
x = subprocess.Popen(client_command, stdout=subprocess.PIPE)

speed_list = []
for item in x.stdout:
    item = str(item)
    #print item
    if 'Mbits/sec' in item.split(' '):
        if "sender\n" not in item.split(' '):
            if "receiver\n" not in item.split(' '):
                x = item.split(' ').index('Mbits/sec')
                speed_list.append(float(item.split(' ')[x-1]))

if len(speed_list) != 0:
    avg_data_rate = np.average(speed_list)
    print avg_data_rate
else:
    avg_data_rate = 0
    print 'Test failed. Doing server direct test to ensure iperf cleans up correctly'
    subprocess.check_output(fail_command)