网络编程学习

注意的指标
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 测试网络带宽的更多相关文章

  1. linux下面测试网络带宽 (转载)

    利用bmon/nload/iftop/vnstat/iptraf实时查看网络带宽状况 一.添加yum源方便安装bmon# rpm -Uhv http://apt.sw.be/redhat/el5/en ...

  2. iperf测试网络带宽

    http://blog.chinaaet.com/telantan/p/30901 https://boke.wsfnk.com/archives/288.html https://www.ibm.c ...

  3. linux 网络带宽和延时测试

    Linux下使用qperf命令来测试网络带宽和网络延迟 参考文章:https://access.redhat.com/solutions/2122681 若是没有安装qperf命令,请使用yum 安装 ...

  4. Linux网络性能评估工具iperf 、CHARIOT测试网络吞吐量

    网络性能评估主要是监测网络带宽的使用率,将网络带宽利用最大化是保证网络性能的基础,但是由于网络设计不合理.网络存在安全漏洞等原因,都会导致网络带宽利用率不高.要找到网络带宽利用率不高的原因,就需要对网 ...

  5. 【Linux】使用 iperf 测试 Linux 服务器带宽

    iperf 简介 iperf 是一个用于测试网络带宽的命令行工具,可以测试服务器的网络吞吐量.目前发现两个很实用的功能: 测试服务器网络吞吐量:如果我们需要知道某台服务器的「最大」网络带宽,那么最好在 ...

  6. 如何在Web服务器80端口上开启SSH服务

    本文所讨论的网络端口复用并非指网络编程中采用SO_REUSEADDR选项的 Socket Bind 复用.它更像是一个带特定路由功能的端口转发工具,在应用层实现. 背景 笔者所处网络中防火墙只开放了一 ...

  7. 高效的DDoS攻击探测与分析工具——FastNetMon

    一.简介 FastNetMon这是一个基于多种抓包引擎(NetFlow, IPFIX, sFLOW, netmap, PF_RING, PCAP)的DoS/DDoS攻击高效分析工具,可以探测和分析网络 ...

  8. [转]网络性能评估工具Iperf详解(可测丢包率)

    原文链接:安全运维之:网络性能评估工具Iperf详解:http://os.51cto.com/art/201410/454889.htm 参考博文:http://linoxide.com/monito ...

  9. IPerf——网络测试工具介绍与源码解析(1)

    IPerf是一个开源的测试网络宽带并能统计并报告延迟抖动.数据包丢失率信息的控制台命令程序,通过参数选项可以方便地看出,通过设置不同的选项值对网络带宽的影响,对于学习网络编程还是有一定的借鉴意义,至少 ...

随机推荐

  1. Appium UI自动化的那些梗

    @作者 彭海波 转载请注明出处 前言 由于需求的快速迭代和敏捷测试的要求,在测试过程中引入自动化成为必不可少的手段.作为一个互联网测试团队,我们自然也引入了自动化测试这个环节.在众多的测试框架中,我们 ...

  2. Matrix QR Decomposition using OpenCV

    Matrix QR decomposition is very useful in least square fitting model. But there is no function avail ...

  3. css之z-index

    要想z-index可以使用,就要配合定位元素使用即position 如果定位元素z-index没有发生嵌套: 1.后来居上的准则 2.哪个大,哪个上 例如 如果定位元素z-index发生嵌套: 1.祖 ...

  4. openssl生成rsa密钥对和密钥格式转换

    首先要下载安装好openssl,下载地址:https://www.openssl.org/source/,安装完成后可以进到命令行运行以下命令: 1. 生成私钥: openssl genrsa -ou ...

  5. SDRAM的主要参数

    (1) 容量.SDRAM的容量经常用XX存储单元×X体×每个存储单元的位数来表示.例如某SDRAM芯片的容量为4M×4×8bit,表明该存储器芯片的容量为16 M字节.或128 M bit. (2) ...

  6. Jquery / js 判断数据类型方法(限制文本框类型输入)

    当想要判断文本框中的值是否为自己想要的类型时,可以通过一些方法作出判断,这里对于光标离开文本框时判断文本框中输入的是否是数值类型,如果不是,做出提示 $("#WORKYEARS") ...

  7. linux查看系统类型和版本

    首先大致普及下linux系统的版本内容. 1.内核版本和发行版本区别 我的理解,内核版本就是指linux中最基层的代码,版本号如 Linux version 3.10.0-327.22.2.el7.x ...

  8. lucene和ElasticSearch基本概念

    lucene基本概念 索引(Index) 对应一个倒排表,一个检索的基本单位.在lucene中就对应一个目录. lucene基本概念 段(Segment) 一个索引可以包含多个段,段与段之间是独立的, ...

  9. 从H264码流中获取视频宽高 (SPS帧) 升级篇

    之前写过 <从H264码流中获取视频宽高 (SPS帧)> . 但发现很多局限性,而且有时解出来是错误的. 所以重新去研究了. 用了 官方提供的代码库来解析. 花了点时间,从代码库里单独把解 ...

  10. Android之RecyclerView(一)

    概述 RecyclerView 是一个 ViewGroup,它用于渲染任何基于适配器的 View.它被官方定义为 ListView 和 GridView 的取代者,是在 Support V7 包中引入 ...