如果地址为up,我想将程序设为checknet,如果它返回0则返回1.这是代码:
#include <stdio.h>
#include <winsock2.h>
#include <stdint.h>
#pragma comment(lib, "ws2_32.lib")
static void init(void)
{
WSADATA wsa;
int err = WSAStartup(MAKEWORD(2, 2), &wsa);
if(err < 0)
{
puts("WSAStartup failed !");
exit(EXIT_FAILURE);
}
}
static void end(void)
{
WSACleanup();
}
int chknet(char * ip)
{
struct sockaddr_in name;
struct hostent * hent;
int sock;
int retour = 0;
init();
/* creat socket icmp */
if(!(sock = socket (AF_INET, SOCK_RAW, IPPROTO_ICMP))) return (-1);
memset(&name,0,sizeof(struct sockaddr_in));
name.sin_family = AF_INET;
name.sin_addr.s_addr = inet_addr(ip);
if(connect(sock,(struct sockaddr *) &name,sizeof(struct sockaddr))==0) retour = 1;
else retour = 0;
end();
return(retour);
}
// Fonction main ***************************
int main(int argc, char *argv[])
{
char *adress="www.stackoverflow.com";
int a= chknet(adress);
printf("result %d\n",a);
system("PAUSE");
}
当我连接到互联网时它会返回1,但即使我没有连接它也会返回1,但它应该返回0。 THX
答案 0 :(得分:0)
您正在将字符串"www.stackoverflow.com"
传递给函数inet_addr()
。这个函数需要一个&#34; IPv4数字和点符号&#34;地址,例如151.101.1.69
- 所以你需要先使用gethostbyname()
之类的东西进行DNS查找。
检查您调用的函数的返回代码总是一个好主意...