c ++套接字连接在不使用ip时不起作用

c++ socket connect not working when not using ip

我正在尝试通过 dns 使用我的 C++ 客户端连接到我的 Java 服务器。

所以当我输入 dns 名称而不是我的 localip 时,它不会连接。代码: 不工作

    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("blalblalb.no-ip.com");
    addr.sin_port = htons(4444);

但是当我输入 dns 的 ip 地址时,它起作用了。代码: 作品

    sockaddr_in addr;
    addr.sin_family = AF_INET;
    addr.sin_addr.s_addr = inet_addr("174.554.xx.xxx");
    addr.sin_port = htons(4444);

这是为什么?

inet_addr() 应该只采用数字和点表示法的地址。

如果要使用主机名,请使用 getaddrinfo() instead. The link to the manual page has a linux example (and here a Windows example)。

请注意,inet_addr() 仅处理 IPv4 地址,不兼容 IPv6 格式。您可以考虑 inet_ptron() 以进行更具前瞻性的开发。

您必须获取服务器的 IP 地址才能使用 inet_addr() 连接到它,您可以使用 gethostbyname() 来实现此目的。

编辑: nvm gethostbyname() 已弃用,因此请使用 getaddrinfo()