MyTtcp 测试网络带宽
网络编程学习
注意的指标
MB/S 带宽
每秒处理的信息 查询等 messages/s queries/s transaction/s
延时
cpu使用率
ttcp测试网络 读写读写 循环 测试网络带宽
正确关闭TCP shutdown_write read->0 closesocket
TCP_NODELAY 延时发送小数据包 认为设置 不等待 即时发送 开启
reuseaddr socket复用

完整代码见
https://git.oschina.net/def/cppPratice/tree/master/MyTtcpV0.1
#include "RecvMessageLoop.h" #include <boost/asio.hpp> #include <iostream> #include <chrono> #include "Common.h" using boost::asio::ip::tcp; void RecvMessageLoop(const std::string& ipStr,
const std::string& portStr, const std::string& MessageBlockLen) {
//std::cout << "RecvMessageLoop" << std::endl; boost::asio::io_service io_service; tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), std::atoi(portStr.c_str()))); tcp::socket socket(io_service);
acceptor.accept(socket); //SetSocketNoDelay(socket,true); boost::system::error_code ec;
long recvBlocklen = 0; size_t len = socket.read_some(boost::asio::buffer(&recvBlocklen,sizeof(recvBlocklen)), ec);
if (len != sizeof(recvBlocklen) || ec) {
PRINTERRORCODE(ec);
return;
} std::cout << "recvlen is: " << recvBlocklen << std::endl; int testLoopTimes = defaultSendLength / recvBlocklen; len = boost::asio::write(socket,boost::asio::buffer(&testLoopTimes, sizeof(testLoopTimes)), ec);
if (len != sizeof(testLoopTimes) || ec) {
PRINTERRORCODE(ec);
return;
} std::unique_ptr<char[]> testBuf(new char[recvBlocklen]);//ok
for (int i = 0; i < recvBlocklen; ++i)
{
testBuf[i] = '\0';
} auto start = std::chrono::steady_clock::now(); while(1) {
len = boost::asio::read(socket,
boost::asio::buffer(testBuf.get(), recvBlocklen),ec);
if (ec == boost::asio::error::eof) {
break;
}else if (len != recvBlocklen || ec) {
PRINTERRORCODE(ec);
return;
}
//std::cout << "read success" << std::endl; int i = len; len = boost::asio::write(socket, boost::asio::buffer(&i, sizeof(i)), ec);
if (len != sizeof(i) || ec) {
PRINTERRORCODE(ec);
return;
}
//std::cout << "write success" << std::endl; } //socket.shutdown(boost::asio::socket_base::shutdown_send); //len = boost::asio::read(socket, // boost::asio::buffer(&len, sizeof(len)), ec); //socket.close(); auto end = std::chrono::steady_clock::now(); std::chrono::duration<double> diff = end - start;
std::cout << "=>Time Elapse " << diff.count() << " s" << std::endl;
std::cout << "Total Length is " << defaultSendLength / 1024 / 1024 << "MB" << std::endl;
std::cout << "Speed is " << defaultSendLength / 1024 / 1024/ diff.count() << "MB" << std::endl;
}
MyTtcp 测试网络带宽的更多相关文章
- linux下面测试网络带宽 (转载)
利用bmon/nload/iftop/vnstat/iptraf实时查看网络带宽状况 一.添加yum源方便安装bmon# rpm -Uhv http://apt.sw.be/redhat/el5/en ...
- iperf测试网络带宽
http://blog.chinaaet.com/telantan/p/30901 https://boke.wsfnk.com/archives/288.html https://www.ibm.c ...
- linux 网络带宽和延时测试
Linux下使用qperf命令来测试网络带宽和网络延迟 参考文章:https://access.redhat.com/solutions/2122681 若是没有安装qperf命令,请使用yum 安装 ...
- Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量
网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络带宽利用率不高的原因,就需要对网 ...
- 【Linux】使用 iperf 测试 Linux 服务器带宽
iperf 简介 iperf 是一个用于测试网络带宽的命令行工具,可以测试服务器的网络吞吐量.目前发现两个很实用的功能: 测试服务器网络吞吐量:如果我们需要知道某台服务器的「最大」网络带宽,那么最好在 ...
- 如何在Web服务器80端口上开启SSH服务
本文所讨论的网络端口复用并非指网络编程中采用SO_REUSEADDR选项的 Socket Bind 复用.它更像是一个带特定路由功能的端口转发工具,在应用层实现. 背景 笔者所处网络中防火墙只开放了一 ...
- 高效的DDoS攻击探测与分析工具——FastNetMon
一.简介 FastNetMon这是一个基于多种抓包引擎(NetFlow, IPFIX, sFLOW, netmap, PF_RING, PCAP)的DoS/DDoS攻击高效分析工具,可以探测和分析网络 ...
- [转]网络性能评估工具Iperf详解(可测丢包率)
原文链接:安全运维之:网络性能评估工具Iperf详解:http://os.51cto.com/art/201410/454889.htm 参考博文:http://linoxide.com/monito ...
- IPerf——网络测试工具介绍与源码解析(1)
IPerf是一个开源的测试网络宽带并能统计并报告延迟抖动.数据包丢失率信息的控制台命令程序,通过参数选项可以方便地看出,通过设置不同的选项值对网络带宽的影响,对于学习网络编程还是有一定的借鉴意义,至少 ...
随机推荐
- vs2012安装Microsoft.AspNet.WebApi.WebHost
工具---库程序包管理器---程序包管理器控制台:输入下面命令: Install-Package Microsoft.AspNet.WebApi.WebHost
- JAVA学习笔记(1-32)
1:数据的输入中,也需要提前声明变量.java区分大小写,注意保留字的问题,注意分号. 2:用import调用一个类.用new新建一个对象,相当于c中的malloc. 3:用final定义一个宏,相当 ...
- Neural Network学习(一) 最早的感知机:Perceptron of Rosenblatt
1. Frank Rosenblatt 首先介绍的是神经网络的开山祖师,先放张图拜拜 Frank Rosenblatt出生在纽约,父亲是医生,其1956年在Cornell大学拿到博士学位后,留校任教, ...
- WPS for Linux,系统缺失字体
启动WPS for Linux后,出现提示"系统缺失字体" . 出现提示的原因是因为WPS for Linux没有自带windows的字体,只要在Linux系统中加载字体即可. 具 ...
- Tomcat和JavaWeb笔记
<iframe src="http://www.xmind.net/embed/XFXh" width="900px" height="540p ...
- OpenGL 矩阵变换
Overview 几何数据--顶点位置,和标准向量(normal vectors),在OpenGL 管道raterization 处理过程之前可通过顶点操作(Vertex Operation)和基本组 ...
- [JSP]获取时间
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.uti ...
- poj1985 Cow Marathon (求树的直径)
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3195 Accepted: 1596 Case ...
- 线性代数和numpy——黑板客老师课程学习
一.代数是什么 代数->数的抽象表示->向量空间(线性空间) 线代->线性代数 关系: 向量空间之间和内部转换是通过线性变换. 实数——一维空间的点 复数——二维空间的点 如果两个向 ...
- java中String、stringbuilder、stringbuffer区别
1.可变与不可变 String类中使用字符数组保存字符串,如下就是,因为有"final"修饰符,所以可以知道string对象是不可变的.每次对String对象进行改变的时候其实都等 ...