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

本文介绍了一个使用Boost.Asio库实现的简单C++网络编程示例,包括客户端和服务端的代码实现。客户端连续发送消息到服务端,服务端接收并处理这些消息,然后返回处理后的结果。

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

目录

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;
        //绑定端口6688
        boost::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 client
            string 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 ***

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

惊鸿一博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值