目录

1 作用说明

2 代码

2.1 客户端client

main.cpp

CMakeLists.txt

2.2 服务端server

main.cpp

CMakeLists.txt

3 结果

client

server


1 作用说明

  • 客户端: 连续发送n个字符串消息 ("client_msg_n"),
  • 服务端: 处理客户端消息, 返回对应的字符串信息("client_msg_n<<handled")

2 代码

2.1 客户端client

main.cpp

#include <iostream>
#include <boost/asio.hpp>using namespace std;//client
int main(int argc, char **argv) {try{cout << "client start...." << endl;//io_service对象boost::asio::io_service ios;//创建socket对象boost::asio::ip::tcp::socket sock(ios);//创建连接端boost::asio::ip::tcp::endpoint ep(boost::asio::ip::address::from_string("127.0.0.1"),6688);//连接sock.connect(ep);//定义一个缓冲区//char data[128];char msgToServer[256];char msgFromServer[256];for(int i = 0; i<3; i++){std::memset(msgToServer, 0x00, sizeof(msgToServer));std::memset(msgFromServer, 0x00, sizeof(msgFromServer));string tmp = "client_msg_" + to_string(i);strcpy(msgToServer, tmp.c_str());cout << "msgToServer: " << msgToServer <<endl;boost::asio::write(sock,boost::asio::buffer(msgToServer));// writing server dealing with the message...boost::asio::read(sock,boost::asio::buffer(msgFromServer));cout << "dataHandled: " << msgFromServer << endl; sleep(1);}}catch (exception& e){cout << e.what()<< endl;}std::cout << "Hello, world!" << std::endl;return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(socket_test)SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11")
find_package( Boost REQUIRED  system)if(NOT Boost_FOUND)message("Not found Boost")
endif()include_directories(${Boost_INCLUDE_DIRS})add_executable(socket_test main.cpp)target_link_libraries(socket_test ${Boost_LIBRARIES})target_link_libraries(${PROJECT_NAME}
-pthread
)install(TARGETS socket_test RUNTIME DESTINATION bin)

2.2 服务端server

main.cpp

#include <iostream>
#include <boost/asio.hpp>using namespace std;int main(int argc, char **argv) {try{cout << "server start..." << endl;//io_service对象boost::asio::io_service ios;//绑定端口6688boost::asio::ip::tcp::acceptor acceptor(ios,boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),6688));cout << acceptor.local_endpoint().address() << endl;char msgFromClient[256];char msgToClient[256];//socket对象boost::asio::ip::tcp::socket sock(ios);//阻塞等待socket连接acceptor.accept(sock); while (1){  //sock.receive(boost::asio::buffer(msgFromClient));boost::asio::read(sock,boost::asio::buffer(msgFromClient));cout << "client:" << sock.remote_endpoint().address()<< "; msgFromClient: " << msgFromClient << endl; //handle the message form clientstring tmp = string(msgFromClient) + "<< handled";strcpy(msgToClient, tmp.c_str());//sock.write_some(boost::asio::buffer(msgToClient));boost::asio::write(sock,boost::asio::buffer(msgToClient));cout << "msgToClient: " << msgToClient << endl; }}catch (exception& e){cout << "exception: " << e.what() << endl;}std::cout << "Hello, world! server" << std::endl;return 0;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.0)project(socket_server)SET(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-std=c++11")
find_package( Boost REQUIRED system)if(NOT Boost_FOUND)message("Not found Boost")
endif()include_directories(${Boost_INCLUDE_DIRS})add_executable(socket_server main.cpp)
target_link_libraries(socket_server ${Boost_LIBRARIES})target_link_libraries(${PROJECT_NAME}
-pthread
)install(TARGETS socket_server RUNTIME DESTINATION bin)

3 结果

client

client start....
msgToServer: client_msg_0
dataHandled: client_msg_0<< handled
msgToServer: client_msg_1
dataHandled: client_msg_1<< handled
msgToServer: client_msg_2
dataHandled: client_msg_2<< handled
Hello, world!
*** Finished ***

server

server start...
0.0.0.0
client:127.0.0.1; msgFromClient: client_msg_0
msgToClient: client_msg_0<< handled
client:127.0.0.1; msgFromClient: client_msg_1
msgToClient: client_msg_1<< handled
client:127.0.0.1; msgFromClient: client_msg_2
msgToClient: client_msg_2<< handled
exception: read: End of file
Hello, world! server
*** Finished ***

boost::asio c++ 网络编程socket通信一个简单例子相关推荐

  1. C#通信之Socket通信的简单例子

    socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 这里构建一个简单的例子 ...

  2. Boost.Asio的网络编程

    简介 这篇笔记是boost::asio的概览, 主要说明了boost的进行CS结构编程的基本步骤. 在网络编程中, 又很多需要IO的操作. 一种是使用Linux的原生C语言API, Linux的核心编 ...

  3. UNIX网络编程笔记(2):一个简单的时间获取程序

    这一讲通过一个简单的时间获取程序简单介绍套接字编程. 1.套接字API 1.1.套接字地址结构 上一讲中介绍了TCP的一些内容,知道了一个套接字对唯一标识了网络中的一个TCP连接,而一个套接字标识了一 ...

  4. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答...

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  5. linux java socket编程_linux下java程序与C语言程序通过SOCKET通信的简单例子

    #include int sockfd,newfd; void *read_socket(); int main() { int ret; pthread_t read_tid,write_tid; ...

  6. 【Python 基础】网络编程 - Python写一个简单的HTTP服务端和客户端,实现Client/Server交互

    1.HTTP 首先讲一下http和https,详细可以去看runoob http-vs-https 基本概念 HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用 ...

  7. Python网络编程(Socket)

    Python网络编程(Socket) Python提供了两个访问级别的网络服务.在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器 Python有 ...

  8. Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例

    Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...

  9. 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明

    基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...

  10. 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程

    基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...

最新文章

  1. 什么是JavaBean
  2. 帝国cms让当前栏目显示不同样式(图文)
  3. Aggregate可以做字符串累加、数值累加、最大最小值
  4. 【机器学习】机器学习神器Scikit-Learn保姆级入门教程
  5. mysql 十八哥_十八哥Mysql笔记之基础篇
  6. 容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额
  7. js初级——复习html+css
  8. python设计模式1-单例模式
  9. 空巢青年,“空巢”是选择还是无奈? | 数据告诉你
  10. C++_智能指针shared_ptr、unique_ptr、weak_ptr、auto_ptr总结
  11. 数据仓库需求分析指南
  12. 计算机文件图标怎么一致大小,电脑图标大小设置的几种方法
  13. PLC江湖波澜不惊,自动化风云录!
  14. 荣耀20android版本10什么意思,荣耀10和荣耀10青春版的区别 差价800荣耀10与青春版哪个好? (全文)...
  15. Python基础-名片管理
  16. Supermap Iserver 安装指南
  17. MBTI职业性格测试(Psytopic特别版)
  18. 机器学习笔记 - YOLOv7 论文简述与推理
  19. Linux系统-LNMP部署农场牧场
  20. OCAD应用:双高斯照相物镜系统结构优化设计

热门文章

  1. struts2_20140720
  2. 应用安全-Web安全-越权漏洞整理
  3. 模拟登陆github
  4. [django]django model的查询和更新
  5. Tomcat session集群
  6. NSArray的排序问题
  7. Java学习日记之 Java-IO流
  8. idea导入项目常见异常处理
  9. 加密方式(包括MD5 base64 对称加密 非对称加密简介)
  10. 10分钟了解JSON Web令牌(JWT) 虫虫搜奇