赞
踩
本文章介绍下通过nc工具、iperf工具和python脚本,实现发送tcp/udp请求
这个工具linux系统默认是自带的,以下是命令的常用参数
在服务端监听端口nc -l port
客户端连接并发送请求nc -v host port
在服务端收到了信息
当服务端端口未监听时,连接会报错
上面的监听方式,当从客户端或服务端退出连接时,另一端也会自动退出
如果想服务端一直监听,则需要加上-k参数
如果想将服务置于后端运行,则可通过setisid,&,nohup命令,如setsid nc -lk 8888
在服务端监听端口nc -ul port
客户端连接并发送请求nc -uv host port
服务端收到消息
tpc是面向连接的,而udp是无连接的。所以当服务器端端口未监听时,连接也不会报错
iperf是一个网络性能测试工具,可以测试tcp/udp带宽质量等
首先要安装iperf
- brew install iperf
- 或者
- yum install iperf
常用参数:iperf --help可查看详细参数
- -c/s:客户端模式/服务端模式
-
- -p:指定iperf测试端口
-
- -i:指定报告间隔
-
- -u:使用udp方式
-
- -b:设置UDP的发送带宽,单位bit/s
-
- -t:设置测试的时长,单位为秒,不设置默认10s
-
- -l:指定包大小,TCP默认8k,UDP默认1470字节
iperf -s -i 1 -p 12306
iperf -c 43.138.0.250 -p 12306 -i 1
iperf -u -s -i 1 -p 12306
iperf -u -c 43.138.0.250 -p 12306 -i 1
使用python2运行
- # -*- coding: utf-8 -*-
- # 一个简单的tcp服务器
- import sys
- from SocketServer import BaseRequestHandler, ThreadingTCPServer
- from datetime import datetime
-
- reload(sys)
- sys.setdefaultencoding('utf8')
-
-
- class EchoHandler(BaseRequestHandler):
- def handle(self):
- print('%s : Got connection from %s' % (datetime.now(), self.client_address))
- while True:
- try:
- msg = self.request.recv(8192)
- print('msg:%s' % msg)
- if not msg:
- break
- self.request.send('receive: ' + msg)
- except Exception as e:
- pass
-
-
- if __name__ == '__main__':
- serv = ThreadingTCPServer(('', 8888), EchoHandler) # 8888为要监听的端口
- serv.serve_forever()
- # -*- coding: utf-8 -*-
- # 一个简单的udp服务器
- from socket import *
-
- serverSocket = socket(AF_INET, SOCK_DGRAM)
-
- serverSocket.bind(('', 12307)) # 12307为要监听的端口号
-
- while True:
- msg, address = serverSocket.recvfrom(1024)
- print(msg)
- message = 'receive: ' + msg
- serverSocket.sendto(message, address)
- # -*- coding: utf-8 -*-
- # 客户端脚本
- import socket
- import time
- import datetime
-
- out_data = "test test test test" # 客户端发送内容
- count = 10 # 发送数据次数
-
-
- def loop_func(l4_type, l4_host, l4_port, second):
- socket_type = {"tcp": socket.SOCK_STREAM, "udp": socket.SOCK_DGRAM}
- s = socket.socket(socket.AF_INET, socket_type.get(l4_type))
- s.connect((l4_host, l4_port))
- loop = 0
- while True:
- cur_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
- print(cur_time)
- print('send: ' + out_data)
- s.send(out_data.encode())
- in_data = s.recv(1024)
- if len(in_data) == 0:
- s.close()
- print('server closed connection.')
- print(in_data)
-
- time.sleep(second)
- loop += 1
- if loop == count:
- print("time out, over")
- break
-
-
- if __name__ == "__main__":
- host = 'localhost' # host
- port = 12307 # port
- #loop_func("tcp", host, port, 1) # tcp
- loop_func("udp", host, port, 1) # udp每1秒发一次数据
服务端输出结果:
客户端输出结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。