websocketpp端口问题

websocketpp端口问题

  1. websocketpp代码库地址:
    https://github.com/zaphoyd/websocketpp
  2. 库提供了一些例题,在examples目录下,新建vs工程,名称为testee_server,搭建开发环境,将examples\testee_server\testee_server.cpp复制到工程中,修改main函数,增加错误捕获范围。
//......
int main(int argc, char * argv[]) {
    // Create a server endpoint
    server testee_server;

    short port = 9002;
    size_t num_threads = 1;

    if (argc == 3) {
        port = atoi(argv[1]);
        num_threads = atoi(argv[2]);
    }

    try {
        // Total silence
        testee_server.clear_access_channels(websocketpp::log::alevel::all);
        testee_server.clear_error_channels(websocketpp::log::alevel::all);

        // Initialize ASIO
        testee_server.init_asio();
        testee_server.set_reuse_addr(true);

        // Register our message handler
        testee_server.set_message_handler(bind(&on_message,&testee_server,::_1,::_2));
        testee_server.set_socket_init_handler(bind(&on_socket_init,::_1,::_2));

        // Listen on specified port with extended listen backlog
        testee_server.set_listen_backlog(8192);
        testee_server.listen(port);

        // Start the server accept loop
        testee_server.start_accept();

        // Start the ASIO io_service run loop
        if (num_threads == 1) {
            testee_server.run();
        } else {
            typedef websocketpp::lib::shared_ptr<websocketpp::lib::thread> thread_ptr;
            std::vector<thread_ptr> ts;
            for (size_t i = 0; i < num_threads; i++) {
                ts.push_back(websocketpp::lib::make_shared<websocketpp::lib::thread>(&server::run, &testee_server));
            }

            for (size_t i = 0; i < num_threads; i++) {
                ts[i]->join();
            }
        }

    } catch (websocketpp::exception const & e) {
        std::cout << "exception: " << e.what() << std::endl;
    }
    catch (...)//捕获其他的错误
    {
    	std::cout << "other exception..." << std::endl;
    }
    return 0;
}

编译工程,得到testee_server.exe:
测试一:启动testee_server.exe(1),然后再次启动testee_server.exe(2),发现,testee_server.exe(2)仍就能够正常启动,没有catch到任何错误。
    解决方法:将testee_server.set_reuse_addr(true);改为testee_server.set_reuse_addr(false); 设置不允许地址复用。
测试二:启动一个端口号为9002的socket服务(名称为socket.exe),然后启动testee_server.exe,发现,testee_server.exe能正常启动,没有catch到任何错误。
    解决方法:testee_server.listen(port);默认使用的是IPv6协议:在这里插入图片描述
将其修改该为:testee_server.listen(boost::asio::ip::tcp::v4(), port); 即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值