我正在尝试使用Boost Asio而不是RakNet,所以我试图按照Boost网站上的示例进行操作,但是我有一些 Unresolved 问题。这里是链接:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/tutorial/tutdaytime1.html

提醒一下,我使该教程(客户端和服务器)都可以正常工作了。

1)为什么查询需要字符串“daytime”?在服务器设置中找不到该位置。仅当我使用该字符串时,客户端似乎才连接。 (尝试过“测试”,但未连接)

2)为什么我不需要为客户端提供连接端口?它本身是在搜索该端口还是在那里,并且还可以手动设置该选项?

提前致谢。

最佳答案

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

这行代码解析了一个端点,其中argv[1]是主机,"daytime"表示端口。是的,这有点令人惊讶,因为您期望在那里会出现类似80443的信息。但是,您看到的是可以使用的服务名称(如主机名),而不是硬编码的端口,并且可以由操作系统解析。

如果主机名是通过/etc/hosts解析的,则服务是通过/etc/services(或者我想是C:\WINDOWS\system32\drivers\etc\services)解析的。

在我的系统上,该文件包含:
daytime     13/tcp
daytime     13/udp

因此,实际上您可以只使用"13"而不是"daytime"。请注意,这是系统白天服务的默认端口。之所以“有效”,是因为您的系统在该端口上应答。 (或者因为您的服务器已经在运行并且正在使用该端口,所以我不知道您在运行哪台服务器以及如何运行:)

10-05 22:43