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是一个开源的测试网络宽带并能统计并报告延迟抖动.数据包丢失率信息的控制台命令程序,通过参数选项可以方便地看出,通过设置不同的选项值对网络带宽的影响,对于学习网络编程还是有一定的借鉴意义,至少 ...
随机推荐
- 策略模式(strategy pattern)
策略模式在java集合中的TreeSet和TreeMap中得到了很好的应用,我们可以实现Comparator接口实现Compareto()方法来定义自己的排序规则,然后通过TreeSet,TreeMa ...
- React Native 实现页面动态切换
第一步. 初始化子View constructor(props){ super(props); this.state = { isChange : true, itemView : (<Text ...
- REST及RESTful的实现
什么是REST? REST (REpresentation State Transfer) 描述了一个架构样式的网络系统,比如 web 应用程序.它首次出现在 2000 年 Roy Fielding ...
- RabbitMQ的work queue(1)
http://www.rabbitmq.com/tutorials/tutorial-two-java.html 在第一个教程中,我们通过一个命名队列来发送消息和接受消息.在这一节,我们将创建一个工作 ...
- 2016 Multi-University Training Contest 2 - 1005 Eureka
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5738 题目大意:给定平面上的n个点,一个集合合法当且仅当集合中存在一对点u,v,对于集合中任意点w,均 ...
- javaScript 正则表达式匹配日期
// yyyyMMddhhmmss var pattern = /^(?:(?!0000)[0-9]{4}(?:(?:0[1-9]|1[0-2])(?:0[1-9]|1[0-9]|2[0-8])|(? ...
- 《On Lisp》第四章第三节图4.6中的rmapcar函数中展现的apply陷阱
(defun rmapcar (fn &rest args) (if (some #'atom args) (apply fn args) (apply #'mapcar #'(lambda ...
- 扫盲贴000---关于python中的if __name__ == '__main__'
对于python中的__name__变量,根据调用python文件的方式不同,__name__变量的值也会不同.假如我有一个名为hello_world.py的python脚本,当我的目的是直接运行这个 ...
- oracle ORA-01427: 单行子查询返回多个行
ORA-01427: 单行子查询返回多个行 前几天开发的同事反馈一个问题,说前台系统报出了ORA错误,希望我们能看看是什么原因.java.sql.SQLException: ORA-01427: si ...
- spring mvc 4.3.2 + mybatis 3.4.1 + mysql 5.7.14 +shiro 幼儿园收费系统 之 动态组合条件查询
实际应用中,系统设计无法预料到用户最终的查询条件是怎样的.通常的做法是给出一些限制死的查询条件让用户查询.业务稍有改动,就要重新设计界面,增加查询字段等,费时费力. 比较好的做法是,除了常用的查询外, ...