MyTtcp 测试网络带宽

本文介绍了一个基于Boost.Asio的网络编程性能测试程序,通过客户端与服务端的数据交互,测试网络带宽及处理性能。该程序关注了关键性能指标如MB/s带宽、消息/秒、查询/秒、交易/秒等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程学习

注意的指标
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;
}

  

转载于:https://www.cnblogs.com/itdef/p/6219170.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值