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()
。
我正在尝试通过 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()
。