c ++ boost asio:bind:地址已在使用中

时间:2016-01-12 15:00:09

标签: c++ sockets boost boost-asio

我正在使用c ++ boost asio来制作服务器客户端应用程序。

我按照here的指南行。

我仍然想知道为什么会得到以下结果:

./server    #ok

./client    # error
  

bind:已在使用的地址

server.cpp:

#include <ctime>
#include <iostream>
#include <stdio.h>
#include <string>
#include <boost/array.hpp>
#include <boost/asio.hpp>

using boost::asio::ip::udp;

struct UDP_Message
{
    double number;
};

int main()
{
    try
    {
        boost::asio::io_service io_service;
        udp::socket socket(io_service, udp::endpoint(udp::v4(), config::udp_port));
        UDP_Message message;
        message.number=0;
        for (;;)
        {
            udp::endpoint remote_endpoint;
            message.number=message.number+0.001;
            boost::system::error_code ignored_error;
            socket.send_to(boost::asio::buffer(&message,sizeof(message)),
            remote_endpoint, 0, ignored_error);
        }
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
    return 0;
}

client.cpp:

#include <ctime>
#include <iostream>
#include <stdio.h>
#include <string>
#include <boost/array.hpp>
#include <boost/asio.hpp>

using boost::asio::ip::udp;

namespace config
{
    const unsigned short udp_port=1414;
}

struct UDP_Message
{
    double number;
};

int main()
{
    try
    {
        boost::asio::io_service io_service;
        boost::asio::socket_base::reuse_address option(true);
        udp::socket socket(io_service, udp::v4());
        socket.set_option(option);
        socket.bind(udp::endpoint(udp::v4(), config::udp_port));
        UDP_Message message;
        for (;;)
        {
            boost::array<char, 1> recv_buf;
            udp::endpoint remote_endpoint;
            boost::system::error_code error;
            socket.receive_from(boost::asio::buffer(recv_buf),
            remote_endpoint, 0, error);
            if (error && error != boost::asio::error::message_size)
            throw boost::system::system_error(error);
            std::memcpy(&message,recv_buf.data(),sizeof(message));
            std::cout<<message.number<<std::endl;
        }
    }
    catch (std::exception& e)
    {
        std::cerr << e.what() << std::endl;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您正尝试将客户端和服务器绑定到同一端口udp_port = 1414。这是你无法做到的。