0
我想做一个程序作为checknet如果ADRESS高达返回1,如果是向下返回0。这里是代码:ICMP插座(WIN)
#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
但是我在这两种情况下都得到1。例如,如果我在地址=“12.2”中设置,它将返回1.但是在我的网络中没有这样的地址。 – Tarik
由于's_addr'中的一些随机值,'connect()'可能返回OK。如何使用本地网络上的实际地址?并检查返回的错误代码的实际值,也许用'perror()'打印它们。否则你只是在猜测。 – gilez
你可以明确的代码。 Thx很多 – Tarik