提升库客户端 - 服务器应用程序

时间:2016-09-21 14:33:38

标签: c++ boost server client boost-asio

我从boost文档网站构建了简单的boost应用程序,但仍然不知道如何使用它。

1- Server application:
#include <ctime>
#include <iostream>
#include <string>
#include <boost/asio.hpp>

using boost::asio::ip::tcp;

std::string make_daytime_string()
{
    using namespace std; // For time_t, time and ctime;
    time_t now = time(0);
    return ctime(&now);
}

int main()
{
    try
    {
        boost::asio::io_service io_service;

        tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 13));

        for (;;)
        {
            tcp::socket socket(io_service);
            acceptor.accept(socket);

            std::string message = make_daytime_string();

            boost::system::error_code ignored_error;
            boost::asio::write(socket, boost::asio::buffer(message), ignored_error);
        }
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }

    return 0;
}

2-客户申请:

#include<iostream>
#include<exception>
#include "boost\array.hpp"
#include "boost\asio.hpp"

using namespace std;
using namespace boost;
using boost::asio::ip::tcp;

int main(int argc, char *argv[])
{
    try
    {
        if (argc != 2)
        {
            cerr << "usage: client <host>" << endl;
            return 1;
        }

        asio::io_service io_service;

        tcp::resolver resolver(io_service);

        tcp::resolver::query query(argv[1], "daytime");

        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

        tcp::socket socket(io_service);

        asio::connect(socket, endpoint_iterator);

        for (;;)
        {
            boost::array<char, 128> buf;
            system::error_code error_code;

            size_t len = socket.read_some(asio::buffer(buf), error_code);

            if (error_code == asio::error::eof)
                break; //Connection closed.
            else
                throw system::system_error(error_code);

            cout.write(buf.data(), len);
        }
    }
    catch (std::exception& e)
    {
        cerr << e.what() << endl;
    }

    while (true)
    {
    }

    return 0;
}

那么,下一步是什么?

我exe然后客户端,但不再看到闪存控制台应用程序。

(注意:两个应用程序编译都很好,配置没问题。

1 个答案:

答案 0 :(得分:0)

 for (;;)
    {
        ...

        if (error_code == asio::error::eof)
            break; //Connection closed.
        else
            throw system::system_error(error_code);
        //code after this line will never be executed

        cout.write(buf.data(), len);
    }

您的客户端不会在控制台中写入任何数据 - 执行循环将会因抛出异常或中断命令而中断