我一直在尝试使用winsock2软件包在ms visual studio 2008中执行此操作,但每当我尝试解析输入的IP地址(有效)时,我会收到“无效的IP ...”错误。我唯一的猜测是有一些权限错误,但我真的不知道什么是错的。请帮忙!
if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0){
error("WSAStartup() failed\n\r");
}
// validate port
if( port <= 0 || port > 65535){
sprintf(msg, "Invalid port - %d. Ports must be between 0 and 65536\n\r",
port);
error(msg);
}
// validate ip
inet_addr = inet_addr(ip);
if( inet_addr == INADDR_NONE){
sprintf(msg, "Not an ip - %s\n\r", ip);
error(msg);
} else {
info = gethostbyaddr((char*)&inet_addr, 4, PF_INET);
if(info == NULL){
sprintf(msg, "Invalid ip - %s\n\r", ip);
error(msg);
}
}
答案 0 :(得分:4)
您需要与ws2_32.lib
:
#pragma comment(lib, "ws2_32.lib")
或者将其作为附加链接器输入放在项目配置中。
答案 1 :(得分:2)
检查您是否链接到ws2_32.lib。我相信这就是你所需要的。
答案 2 :(得分:1)
除非有令人信服的理由保持Winsock 2.0兼容级别(在非常旧版本的Windows上运行;使用依赖于旧Winsock行为的其他代码等),否则您可能还需要考虑更改:
if(WSAStartup(MAKEWORD(2,0),&amp; wsaData)!= 0){
到
if(WSAStartup(MAKEWORD(2,2),&amp; wsaData)!= 0){
2.2是Winsock API的最新版本。
答案 3 :(得分:1)
端口号sin_port也需要按网络字节顺序排列,否则你将把你的套接字绑定到一个与你想象的完全不同的端口。使用htons()并查看其他示例。
(这仅适用于小端系统,但无论如何都是个好主意。大多数Windows系统都是小端的。)