当前位置:  开发笔记 > 编程语言 > 正文

boost.asio如何发现我的服务器应用正在侦听哪个端口?

如何解决《boost.asio如何发现我的服务器应用正在侦听哪个端口?》经验,为你挑选了2个好方法。

当我连接到服务器的客户端应用程序 - 使用IP地址和端口时,boost.asio不使用基本概念,这有点奇怪.可能是我在Boost中有点诺贝 - 我接受了 - 但无论如何我不明白.
所以,我有这样的代码让客户端连接到localhost上的服务器:

        boost::asio::io_service io_service;
        tcp::resolver resolver(io_service);
        tcp::resolver::query query("localhost", "daytime"); 
        tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
        tcp::resolver::iterator end;

        tcp::socket socket(io_service);
        boost::system::error_code error = boost::asio::error::host_not_found;
        while(error && endpoint_iterator != end) {
            socket.close();
            socket.connect(*endpoint_iterator++, error);
        }

WinSock 2.0中的Windows使用两个参数 - IP和端口 - 来标识服务器.
因此,问题是 - Asio究竟如何找出服务器正在监听连接的端口?它扫描所有端口吗?而且,如果是这样,如果两个服务器同时在不同的端口上侦听会发生什么?



1> Imran.Fanasw..:

尝试,

tcp::resolver::query query("localhost", boost::lexical_cast(port));//assuming port is an int

要回答您的问题,请回想一下您是在端口13上启动服务器.这恰好是运行Linux日间服务的端口(http://www.sorgonet.com/linux/linuxdaemons/).因此,他们随后能够使用查询("localhost","daytime")而不是指定端口.



2> Ferruccio..:

您告诉它您要在日间服务使用的端口上连接到localhost.它会在服务文件中查找相应的端口号(通常是Windows下的C:\ WINDOWS\system32\drivers\etc\services,我相信Unix下的/ etc/services).您也可以在那里使用显式端口号.

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有