程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 使用Boost asio實現同步的TCP/IP通信,boostasio

使用Boost asio實現同步的TCP/IP通信,boostasio

編輯:C++入門知識

使用Boost asio實現同步的TCP/IP通信,boostasio


  可以先了解一下Boost asio基本概念,以下是Boost asio實現的同步TCP/IP通信:

  服務器程序部分,如果想保留套接字之後繼續通信,可以動態申請socket_type,保存指針,因為socket_type貌似不能拷貝:

#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp>

using namespace boost::asio;
using namespace std;

int main()
{
    try
    {
        typedef ip::tcp::acceptor acceptor_type;
        typedef ip::tcp::endpoint endpoint_type;
        typedef ip::tcp::socket socket_type;

        std::cout<<"Server start."<<endl;
        io_service io;
        acceptor_type acceptor(io, endpoint_type(ip::tcp::v4(), 6688));
        std::cout<<acceptor.local_endpoint().address()<<endl;

        for (;;)
        {
            socket_type sock(io);
            acceptor.accept(sock);

            std::cout<<"Client";
            std::cout<<sock.remote_endpoint().address()<<endl;
            sock.send(buffer("Hello asio"));
        }
    }
    catch (std::exception &e)
    {
        std::cout<<e.what()<<endl;
    }

    return 0;
}

  客戶端:

#include "stdafx.h"
#include <iostream>
#include <boost/asio.hpp>

using namespace boost::asio;
using namespace std;

int main()
{
    try
    {
        typedef ip::tcp::acceptor acceptor_type;
        typedef ip::tcp::endpoint endpoint_type;
        typedef ip::tcp::socket socket_type;
        typedef ip::address address_type;

        std::cout<<"Client start."<<endl;
        io_service io;
        socket_type sock(io);
        endpoint_type ep(address_type::from_string("127.0.0.1"), 6688);

        sock.connect(ep);

        vector<char> str(100, 0);
        boost::system::error_code ec;
        for (;;)//循環接收
        {
            sock.read_some(buffer(str), ec);
            if (ec)
            {
                break;
            }
            cout<<&str[0];
        }
        // 析構自動斷開連接
    }
    catch (std::exception &e)
    {
        std::cout<<e.what()<<endl;
    }
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved