5

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


        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);
        }

Windows 在其 WinSock 2.0 中使用两个参数——IP 和端口——来识别服务器。
所以,问题是 - Asio 究竟是如何找出服务器在哪个端口上监听连接的?它会扫描所有端口吗?而且,如果确实如此,如果两台服务器同时监听不同的端口会发生什么?

4

3 回答 3

8

尝试,

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

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

于 2009-06-30T00:27:42.373 回答
5

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

于 2009-02-23T18:49:50.160 回答
0

在 localhost 上的端口 13 上打开 netcat 侦听,它将接受演示的连接。连接时输入一些 blabla,您将在演示程序中看到运行 netcat 的输出,运行:nc -l -p 13

视窗?没有网猫?安装cygwin,添加netcat

于 2010-03-03T13:23:50.460 回答