asio tcp客户端应用程序上的端口规范

asio tcp客户端应用程序上的端口规范,tcp,boost-asio,Tcp,Boost Asio,我用ASIO重写C++中的Python扭曲服务器。我已经从中设置了以下示例 : Dayday.1-同步TCP日间客户端 Dayday.3-异步TCP日间服务器 而且它们似乎运作正常。然而,让我困惑的是,当我创建twisted服务器时,它和客户端都需要明确的IP地址和端口号规范。我在这里的经历略有不同: 在客户端应用程序上,不需要指定端口号。我可以通过仅使用127.0.0.1作为命令行参数成功连接到服务器 而且,只要第一个字节是127(例如127.1.2.3 connects),我似乎能够使用该I

我用ASIO重写C++中的Python扭曲服务器。我已经从中设置了以下示例

:

Dayday.1-同步TCP日间客户端
Dayday.3-异步TCP日间服务器

而且它们似乎运作正常。然而,让我困惑的是,当我创建twisted服务器时,它和客户端都需要明确的IP地址和端口号规范。我在这里的经历略有不同:

  • 在客户端应用程序上,不需要指定端口号。我可以通过仅使用127.0.0.1作为命令行参数成功连接到服务器
  • 而且,只要第一个字节是127(例如127.1.2.3 connects),我似乎能够使用该IP地址的任何合法变体连接到同一台服务器
  • 客户机代码中有一个文本,指定使用我假设是OS提供的“日间”TCP服务进行连接。但是,服务器代码中没有对此的引用。为什么我必须指定要连接的特定服务?我还怀疑这项服务可能与第1点和第2点中的行为有关

  • 现在我知道服务器有一个侦听接收器套接字,它只在收到请求后建立连接,但我想在这里了解更多详细信息。

    Day是*nix世界中众所周知的服务。您可以通过查看
    /etc/services
    文件获得已知服务的列表,您可以在其中看到以下记录:

    daytime          13/udp     # Daytime (RFC 867)
    daytime          13/tcp     # Daytime (RFC 867)
    
    当主机名提供了
    service\u 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如果是“日间”服务。

    谢谢。所以我可以删除Day文本并显式连接?另外,您对第2点有什么想法?AFAIK 127.x.x.x是一个环回,默认情况下,地址与所有接口绑定。