我尝试使用Boost Asio而不是RakNet,所以我试图跟随Boost网站上的示例,但我还有一些问题没有得到答复。这是链接:http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/tutorial/tutdaytime1.html
只是抬头,我让教程正常工作,包括客户端和服务器。
1)为什么查询需要字符串"白天"?它在服务器设置中无处可寻。当我使用该字符串时,客户端似乎只能连接。 (尝试"测试"它没有连接)
2)为什么我不需要为客户端提供连接端口?它是自己搜索这个端口还是可以选择手动设置它?
提前致谢。
答案 0 :(得分:9)
tcp::resolver::query query(argv[1], "daytime");
这一行解析了一个端点,其中argv[1]
是主机,"daytime"
代表 端口 。是的,这有点令人惊讶,因为你在那里期待80
或443
之类的东西。但是,您看到的是 service-name ,它可以使用(如主机名)而不是硬编码端口,并由操作系统解析。
如果通过/etc/hosts
解析了主机名,则会通过/etc/services
(或我认为C:\WINDOWS\system32\drivers\etc\services
)解析服务。
在我的系统上,此文件包含:
daytime 13/tcp
daytime 13/udp
所以,实际上你可以只使用"13"
代替"daytime"
。请注意,这是系统日间服务的默认端口。它"工作"因为您的系统在该端口上应答(或者因为您的服务器已在运行并使用该端口,我不知道您运行的服务器以及如何:))