boost::asio c++ 网络编程socket通信一个简单例子
目录
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通信一个简单例子相关推荐
- C#通信之Socket通信的简单例子
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 这里构建一个简单的例子 ...
- Boost.Asio的网络编程
简介 这篇笔记是boost::asio的概览, 主要说明了boost的进行CS结构编程的基本步骤. 在网络编程中, 又很多需要IO的操作. 一种是使用Linux的原生C语言API, Linux的核心编 ...
- UNIX网络编程笔记(2):一个简单的时间获取程序
这一讲通过一个简单的时间获取程序简单介绍套接字编程. 1.套接字API 1.1.套接字地址结构 上一讲中介绍了TCP的一些内容,知道了一个套接字对唯一标识了网络中的一个TCP连接,而一个套接字标识了一 ...
- AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答...
一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...
- linux java socket编程_linux下java程序与C语言程序通过SOCKET通信的简单例子
#include int sockfd,newfd; void *read_socket(); int main() { int ret; pthread_t read_tid,write_tid; ...
- 【Python 基础】网络编程 - Python写一个简单的HTTP服务端和客户端,实现Client/Server交互
1.HTTP 首先讲一下http和https,详细可以去看runoob http-vs-https 基本概念 HTTP(HyperText Transfer Protocol:超文本传输协议)是一种用 ...
- Python网络编程(Socket)
Python网络编程(Socket) Python提供了两个访问级别的网络服务.在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器 Python有 ...
- Java网络编程 Socket、ServerSocket 详解,方法介绍及完整代码示例
Java网络编程 Socket.ServerSocket 详解,方法介绍及完整代码示例 概念 什么是网络编程? 网络编程是指编写运行在多个设备(计算机)的程序,这些设备通过网络连接起来.当这些通过网络 ...
- 基于c++和asio的网络编程框架asio2教程基础篇:1、基本概念和使用说明
基于c++和asio的网络编程框架asio2教程基础篇:1.基本概念和使用说明 由于asio2没有写技术文档,因此打算写几篇文章介绍一下如何使用它,主要是针对新手. 1.asio2如何使用? asio ...
- 基于c++和asio的网络编程框架asio2教程基础篇:2、各个回调函数的触发顺序和执行流程
基于c++和asio的网络编程框架asio2教程基础篇:2.各个回调函数的触发顺序和执行流程 以tcp举例: tcp服务端流程: #include <asio2/asio2.hpp>int ...
最新文章
- 什么是JavaBean
- 帝国cms让当前栏目显示不同样式(图文)
- Aggregate可以做字符串累加、数值累加、最大最小值
- 【机器学习】机器学习神器Scikit-Learn保姆级入门教程
- mysql 十八哥_十八哥Mysql笔记之基础篇
- 容器编排技术 -- Kubernetes 在 Namespace 中配置默认的CPU请求与限额
- js初级——复习html+css
- python设计模式1-单例模式
- 空巢青年,“空巢”是选择还是无奈? | 数据告诉你
- C++_智能指针shared_ptr、unique_ptr、weak_ptr、auto_ptr总结
- 数据仓库需求分析指南
- 计算机文件图标怎么一致大小,电脑图标大小设置的几种方法
- PLC江湖波澜不惊,自动化风云录!
- 荣耀20android版本10什么意思,荣耀10和荣耀10青春版的区别 差价800荣耀10与青春版哪个好? (全文)...
- Python基础-名片管理
- Supermap Iserver 安装指南
- MBTI职业性格测试(Psytopic特别版)
- 机器学习笔记 - YOLOv7 论文简述与推理
- Linux系统-LNMP部署农场牧场
- OCAD应用:双高斯照相物镜系统结构优化设计