• asio tcp client and server implement


    asio tcp client and server implement

    tcp server

    #include <cstdlib>
    #include <iostream>
    #include <thread>
    #include <utility>
    #include "asio.hpp"
    
    using asio::ip::tcp;
    
    const int max_length = 1024;
    
    void session(tcp::socket sock)
    {
        try
        {
            for (;;)
            {
                char data[max_length];
    
                asio::error_code error;
                size_t length = sock.read_some(asio::buffer(data), error);
                if (error == asio::error::eof)
                    break; // Connection closed cleanly by peer.
                else if (error)
                    throw asio::system_error(error); // Some other error.
    
                char data_print[max_length];
                strncpy(data_print, data, length);
                data_print[length] = '';
                std::cout<<data_print<<std::endl;
                asio::write(sock, asio::buffer(data, length));
            }
        }
        catch (std::exception& e)
        {
            std::cerr << "Exception in thread: " << e.what() << "
    ";
        }
    }
    
    void server(asio::io_context& io_context, unsigned short port)
    {
        tcp::acceptor a(io_context, tcp::endpoint(tcp::v4(), port));
        for (;;)
        {
            std::thread(session, a.accept()).detach();
        }
    }
    
    int main(int argc, char* argv[])
    {
        try
        {
            if (argc != 2)
            {
                std::cerr << "Usage: blocking_tcp_echo_server <port>
    ";
                return 1;
            }
    
            asio::io_context io_context;
    
            server(io_context, std::atoi(argv[1]));
        }
        catch (std::exception& e)
        {
            std::cerr << "Exception: " << e.what() << "
    ";
        }
    
        return 0;
    }

    tcp client

    #include <cstdlib>
    #include <cstring>
    #include <iostream>
    #include "asio.hpp"
    
    using asio::ip::tcp;
    
    enum { max_length = 1024 };
    
    int main(int argc, char* argv[])
    {
        try
        {
            if (argc != 3)
            {
                std::cerr << "Usage: blocking_tcp_echo_client <host> <port>
    ";
                return 1;
            }
    
            asio::io_context io_context;
    
            tcp::socket s(io_context);
            tcp::resolver resolver(io_context);
            asio::connect(s, resolver.resolve(argv[1], argv[2]));
    
            std::cout << "Enter message: ";
            char request[max_length];
            std::cin.getline(request, max_length);
            size_t request_length = std::strlen(request);
            asio::write(s, asio::buffer(request, request_length));
    
            char reply[max_length];
            size_t reply_length = asio::read(s, asio::buffer(reply, request_length));
            std::cout << "Reply is: ";
            std::cout.write(reply, reply_length);
            std::cout << "
    ";
        }
        catch (std::exception& e)
        {
            std::cerr << "Exception: " << e.what() << "
    ";
        }
    
        return 0;
    }
  • 相关阅读:
    Linux系统启动流程
    linux系统目录介绍
    Nginx 安装配置教程
    深入理解linux系统的目录结构
    Mac 下安装Ruby环境(转)
    Android逆向之旅---SO(ELF)文件格式详解(转)
    TAG-9F10 发卡行相关数据(转)
    公钥,私钥,数字证书,签名,加密,认证,的概念区分(转)
    PBOC~PPT-补充内容B(转)
    PBOC~PPT-补充A(转)
  • 原文地址:https://www.cnblogs.com/pugang/p/12832423.html
Copyright © 2020-2023  润新知