- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚开始学习C,现在正在学习如何使用winsock2-Header。要将 IP 地址从字符串表示形式转换为二进制形式,我使用函数 InetPtonW
。我的问题是这个函数总是返回 IP 地址 1.0.0.0。
我在 Windows 10 上使用 Visual Studio。我阅读了 Microsoft 的文档(请参阅 here ),并且还阅读了 this关于 Stackoverflow 的问题。我使用其他数据类型尝试了不同的方法,但无法得到正确的结果。
下面是我的问题的相关代码。
int main() {
WSADATA wsa;
SOCKET s;
struct sockaddr_in server;
PCWSTR pStringIp = (L"172.217.168.14"); //IP for own webserver
PVOID pAddrBuf;
char* message;
char* recvbuf; // Buffer for the reply
int recvbuflen = DEFAULT_BUFLEN; //Size of the reply from the server
/* Socket creation etc. would be here */
pAddrBuf = malloc(INET6_ADDRSTRLEN);
if (pAddrBuf == NULL) {
printMemoryErrorFailMessage(errno, pAddrBuf);
return EXIT_FAILURE;
}
server.sin_addr.s_addr = InetPtonW(AF_INET, pStringIp, pAddrBuf);
free(pAddrBuf);
}
我希望在示例中 IP 地址将转换为 172.217.168.14,而不是 1.0.0.0
如果您需要更多信息或更多代码,请询问。感谢您的帮助。
请Necessary_Function
最佳答案
来自the InetPtonW
documentation :
对于参数pAddrBuf
A pointer to a buffer in which to store the numeric binary representation of the IP address. The IP address is returned in network byte order.
对于返回值
If no error occurs, the
InetPton
function returns a value of1
and the buffer pointed to by thepAddrBuf
parameter contains the binary numeric IP address in network byte order.
总结一下:该函数根据成功还是失败返回 bool 值 1
或 0
;如果成功,它将地址写入 pAddrBuffer(第三个参数)指向的内存中。
之所以得到地址1.0.0.0
是因为你使用返回的 bool 结果作为地址,而丢弃了写入pAddrBuf<指向的内存的实际地址
.
使用该函数的“正确”方法如下:
if (InetPtonW(AF_INET, pStringIp, &server.sin_addr.s_addr) == 1)
{
// Success, use the address some way
}
关于c - InetPtonW 始终返回 1.0.0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57969791/
我正在尝试使用 InetPtonW : if(InetPtonW(AF_INET, argv[1], &ThisSenderInfo.sin_addr)和 #include • 我试过使用InetP
我刚刚开始学习C,现在正在学习如何使用winsock2-Header。要将 IP 地址从字符串表示形式转换为二进制形式,我使用函数 InetPtonW。我的问题是这个函数总是返回 IP 地址 1.0.
我是一名优秀的程序员,十分优秀!