我使用asio在C ++中重写python twisted服务器。我已经从
中设置了以下示例http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/tutorial.html:
Daytime.1 - 同步TCP白天客户端
Daytime.3 - 异步TCP日间服务器
他们似乎运作正常。然而,令我困惑的是,当我创建了扭曲的服务器时,它和客户端都需要明确规定IP地址和端口号。我的体验略有不同:
现在我知道服务器有一个接收器套接字监听,只有在收到请求后才建立连接,但我想在这里提供更多细节。
答案 0 :(得分:1)
白天是* nix世界中众所周知的服务。您可以通过查看/etc/services
文件获取已知服务列表,您可以在其中看到以下记录:
daytime 13/udp # Daytime (RFC 867)
daytime 13/tcp # Daytime (RFC 867)
当service_name
提供主机名时,tcp端点使用getaddrinfo
以下版本:
int error = ::getaddrinfo(host, service, &hints, result);
查看手册页[强调我的]:
int
getaddrinfo(const char *hostname, const char *servname, const struct addrinfo *hints, struct addrinfo **res)
The hostname and servname arguments are either pointers to NUL-terminated strings or the null pointer. An acceptable
value for hostname is either a valid host name or a numeric host address string consisting of a dotted decimal IPv4
address or an IPv6 address. The servname is either a decimal port number or a *service name listed in services(5)*. At
least one of hostname and servname must be non-null.
因此,简而言之,只要提供正确的服务名称,它就知道要使用的正确端口号。如果是"白天" 13
服务。