关于boost::asio
2024-09-05 11:09:57
// BoostServer.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp> using namespace boost::asio;
#define BLOCK_SIZE 64*1024 int main(int argc, char* argv[])
{
// 所有asio类都需要io_service对象
io_service iosev;
ip::tcp::acceptor acceptor(iosev,
ip::tcp::endpoint(ip::tcp::v4(), 1000));
for(;;)
{
// socket对象
ip::tcp::socket socket(iosev);
// 等待直到客户端连接进来
acceptor.accept(socket);
// 显示连接进来的客户端
std::cout << "client from: "
<< socket.remote_endpoint().address() << std::endl; boost::system::error_code ec; // 从客户端读取数据
char buf[BLOCK_SIZE];
int len = socket.read_some(buffer(buf), ec);
// 或者可以使用read_until读到某个字符为止
// 或者可以使用某种判断方式循环读取 if (ec)
{
std::cout <<
boost::system::system_error(ec).what() << std::endl;
break;
}
std::cout.write(buf, len);
std::cout << len << std::endl; Sleep(1000); // 向客户端发送
len = socket.write_some(buffer(buf, len), ec);
if(ec)
{
std::cout <<
boost::system::system_error(ec).what() << std::endl;
break;
}
std::cout << "writed " << len << std::endl;
// 与当前客户交互完成后循环继续等待下一客户连接
} return 0; }
异步读可以使用async_read_some或者async_read等
最新文章
- struts2+spring的两种整合方式
- Windows Server 2012 虚拟化实战:域
- CSS3系列之3D制作
- UIButton的titleEdgeInsets和imageEdgeInsets属性
- navicat premium 导出表结构
- TortoiseSVN期望文件系统格式在“1”到“6”之间;发现格式“7”
- roscpp源码阅读
- Windows下使用Visual Studio 2010编译ffmpeg全过程
- PowerDesigner使用详解
- loadrunner简单的例子(demo)
- Qt中添加背景图片的方法
- C51单片机模拟I2C总线驱动程序设计
- Objective-C时间戳转换的转换和时间
- spoj 1557 GSS3 - Can you answer these queries III 线段树
- 使用jquery 1.7 及以后的版本 attr 问题
- Eclipse扩展点实践之添加快捷菜单项(Command方式实现)
- MySQL数据库规约.
- Flutter 即学即用系列博客——04 Flutter UI 初窥
- lua生成UUID
- Forth相关IO操作
热门文章
- 李宏毅 Keras2.0演示
- @Transactional事务总结
- SpringCloud学习(二)服务消费者(rest+ribbon)(Finchley版本)
- linux下nginx的学习
- 菜鸟系列k8s——快速部署k8s集群
- [bzoj4026]dC Loves Number Theory_主席树_质因数分解_欧拉函数
- 15.sqoop数据从mysql里面导入到HDFS里面
- [转帖]mysql8.0忘记密码如何操作?
- 自定义函数(function)
- kubernetes dashboard访问用户添加权限控制