C++判断主机是否处于联网状态

 更新时间:2018年06月29日 09:49:04   作者:JPDAYSUNDAY  
这篇文章主要为大家详细介绍了C++判断主机是否处于联网状态,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++判断主机是否处于联网状态的具体代码,供大家参考,具体内容如下

直接让本机访问一个网站,如果成功的话,就说明成功联网,没有访问成功,则说明没有联网!!!

#include<iostream>
#include <WINSOCK2.H>
#pragma comment(lib,"ws2_32.lib")
#define LEN 1024 //接收数据的大小
using namespace std;
 
 
int main()
{
 //加载套接字库
 WORD wVersionRequested;
 WSADATA wsaData;
 int err;
 
 wVersionRequested = MAKEWORD( 1, 1 );  //初始化Socket动态连接库,请求1.1版本的winsocket库
 
 err = WSAStartup( wVersionRequested, &wsaData );
 if ( err != 0 ) {
 return 0;
 }
 
 if ( LOBYTE( wsaData.wVersion ) != 1 ||  //判断请求的winsocket是不是1.1的版本
    HIBYTE( wsaData.wVersion ) != 1 ) {
 WSACleanup( );  //清盘
 return 0;   //终止对winsocket使用
 }
 //WSADATA ws;
 //WSAStartup(MAKEWORD(2,2),&ws);//
 char http[60] = "www.google.com";  //访问谷歌网页
 SOCKET sock = socket(AF_INET,SOCK_STREAM,0);//建立socket
 if (sock == INVALID_SOCKET)
 {
 cout<<"建立访问socket套接字失败!"<<endl;
 return 0;
 }
 sockaddr_in hostadd;
 hostent* host = gethostbyname(http);//取得主机的IP地址
 if(host==NULL)
 {
 cout<<"主机处于没有联网状态;"<<endl;
 return 0;
 }
 cout<<"主机处于联网状态,现在可以进行通信!"<<endl;
 memcpy(&hostadd,host->h_addr,sizeof(hostadd));//将返回的IP信息Copy到地址结构
 hostadd.sin_family = AF_INET;
 hostadd.sin_port = htons(80);
 
 
 char buf[LEN]="GET / HTTP/1.1\r\nHost: ";//构造Http请求数据包
 strcat(buf,inet_ntoa(hostadd.sin_addr));
 strcat(buf," \r\nContent-Length: 10\r\n\r\n");
 strcat(buf,"Connection:close");
 
 
 int time = 1000; //超时时间
 setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&time,sizeof(time));
 
 
 if (connect(sock,(sockaddr*)&hostadd,sizeof(hostadd)) == SOCKET_ERROR)//连接请求
 {
 cout<<"与网页建立连接失败!"<<endl;
 return 0;
 }
 if (SOCKET_ERROR == send(sock,buf,strlen(buf)+1,0))//发送构造好的Http请求包
 {
 cout<<"发送数据包失败!"<<endl;
 return 0;
 }
 memset(buf,0,LEN);
 recv(sock,buf,LEN,0);  //接收返回的数据
 cout<<"从网页中获取的数据为:"<<buf;
 closesocket(sock);
 WSACleanup();
return 0;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Qt自定义控件实现简易仪表盘

    Qt自定义控件实现简易仪表盘

    这篇文章主要为大家详细介绍了Qt自定义控件实现简易仪表盘,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-12-12
  • C语言实现数组的循环左移,右移,翻转的示例

    C语言实现数组的循环左移,右移,翻转的示例

    今天小编就为大家分享一篇C语言实现数组的循环左移,右移,翻转的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • C语言中%c与%s的区别与划分详解

    C语言中%c与%s的区别与划分详解

    这篇文章主要介绍了C语言中%c与%s的区别与划分详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • C++实现学生考勤信息管理系统

    C++实现学生考勤信息管理系统

    这篇文章主要为大家详细介绍了C++实现学生考勤信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C语言详解如何实现顺序栈

    C语言详解如何实现顺序栈

    顺序栈,就是用一组地址连续的存储单元来存放栈元素,然后用一个栈结构去维护一个栈。在C中,可用动态开辟的数组去表示,维护的栈结构需要有一个栈底和一个栈顶指针
    2022-04-04
  • C++11 上下文关键字的具体实践

    C++11 上下文关键字的具体实践

    本文主要介绍了C++11 上下文关键字的具体实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • C语言的入口函数的实现

    C语言的入口函数的实现

    在C语言的世界里,所有的程序都是用函数来装配的,main称之为主函数,是所有程序运行的入口,本文主要介绍了C语言的入口函数,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • VC++实现输出GIF到窗体并显示GIF动画的方法

    VC++实现输出GIF到窗体并显示GIF动画的方法

    这篇文章主要介绍了VC++实现输出GIF到窗体并显示GIF动画的方法,需要的朋友可以参考下
    2014-07-07
  • 详解C++标准库中处理正则表达式的类std::regex

    详解C++标准库中处理正则表达式的类std::regex

    std 是 C++ 标准库的命名空间,包含了大量标准的 C++ 类、函数和对象,这些类和函数提供了广泛的功能,包括输入输出、容器、算法、字符串处理等,这篇文章主要介绍了C++标准库中提供的用于处理正则表达式的类std::regex,需要的朋友可以参考下
    2024-03-03
  • QT中QDataStream二进制数据读写的实现

    QT中QDataStream二进制数据读写的实现

    本文主要介绍了QT中QDataStream二进制数据读写的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论