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

    1. #include<iostream>
    2. #include <WINSOCK2.H>
    3. #pragma comment(lib,"ws2_32.lib")
    4. #define LEN 1024    //接收数据的大小
    5. using namespace std;
    6. int main()
    7. {
    8. //加载套接字库
    9. WORD wVersionRequested;
    10. WSADATA wsaData;
    11. int err;
    12. wVersionRequested = MAKEWORD( 1, 1 );    //初始化Socket动态连接库,请求1.1版本的winsocket库
    13. err = WSAStartup( wVersionRequested, &wsaData );
    14. if ( err != 0 ) {
    15. return 0;
    16. }
    17. if ( LOBYTE( wsaData.wVersion ) != 1 ||   //判断请求的winsocket是不是1.1的版本
    18. HIBYTE( wsaData.wVersion ) != 1 ) {
    19. WSACleanup( );          //清盘
    20. return 0;                   //终止对winsocket使用
    21. }
    22. //WSADATA ws;
    23. //WSAStartup(MAKEWORD(2,2),&ws);//
    24. char http[60] = "www.google.com";           //访问谷歌网页
    25. SOCKET sock = socket(AF_INET,SOCK_STREAM,0);//建立socket
    26. if (sock == INVALID_SOCKET)
    27. {
    28. cout<<"建立访问socket套接字失败!"<<endl;
    29. return 0;
    30. }
    31. sockaddr_in hostadd;
    32. hostent* host = gethostbyname(http);//取得主机的IP地址
    33. if(host==NULL)
    34. {
    35. cout<<"主机处于没有联网状态;"<<endl;
    36. return 0;
    37. }
    38. cout<<"主机处于联网状态,现在可以进行通信!"<<endl;
    39. memcpy(&hostadd,host->h_addr,sizeof(hostadd));//将返回的IP信息Copy到地址结构
    40. hostadd.sin_family = AF_INET;
    41. hostadd.sin_port = htons(80);
    42. char buf[LEN]="GET / HTTP/1.1\r\nHost: ";//构造Http请求数据包
    43. strcat(buf,inet_ntoa(hostadd.sin_addr));
    44. strcat(buf," \r\nContent-Length: 10\r\n\r\n");
    45. strcat(buf,"Connection:close");
    46. int time = 1000;    //超时时间
    47. setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,(char*)&time,sizeof(time));
    48. if (connect(sock,(sockaddr*)&hostadd,sizeof(hostadd)) == SOCKET_ERROR)//连接请求
    49. {
    50. cout<<"与网页建立连接失败!"<<endl;
    51. return 0;
    52. }
    53. if (SOCKET_ERROR == send(sock,buf,strlen(buf)+1,0))//发送构造好的Http请求包
    54. {
    55. cout<<"发送数据包失败!"<<endl;
    56. return 0;
    57. }
    58. memset(buf,0,LEN);
    59. recv(sock,buf,LEN,0);               //接收返回的数据
    60. cout<<"从网页中获取的数据为:"<<buf;
    61. closesocket(sock);
    62. WSACleanup();
    63. return 0;
    64. }

[转贴] C++ 判断主机是否处于联网状态下的更多相关文章

  1. Android判断当前的android设备是否处于联网状态

    首先,要想获得当前android设备是否处于联网状态,那么android本身给我们提供了一个服务 private ConnectivityManager connectivityManager;//用 ...

  2. intel vt-x处于禁用状态下如何处理

    1.首先看你的bios选项里面有没有该选项,如果没有就更新,更新之后还没有,则不支持 2.找到intel Virtualization Technology 将状态改为Enabled  同时找到int ...

  3. 锋利的jQuery-4--停止动画和判断是否处于动画状态(防止动画加入队列过多的办法)

    1.停止元素的动画:stop([cleanQueue, gotoEnd]):第一个参数代表是否要清空未执行完的动画队列,第二个参数代表是否直接将正在执行的动画跳转到末状态. 无参数stop():立即停 ...

  4. jQuery停止动画和判断是否处于动画状态

    1.停止元素的动画 stop([clearQueue][,gotoEnd]); 参数clearQHCHC和gotoEnd都足町选的参数,为Boolean值(ture或flase).clearQueue ...

  5. jQuery如何停止元素的animate动画,还有怎样判断是否处于动画状态

    jquery的animation会自动进入队列,就出现了一个问题,这些动画会一一执行完成,而我们实际的本意是当鼠标移开的时候动画即终止. 停止元素的动画方法:stop()语法结构:stop([clea ...

  6. Struts2重新学习之自定义拦截器(判断用户是否是登录状态)

    拦截器 一:1:概念:Interceptor拦截器类似于我们学习过的过滤器,是可以再action执行前后执行的代码.是web开发时,常用的技术.比如,权限控制,日志记录. 2:多个拦截器Interce ...

  7. C#:判断当前线程所处状态&委托

    1.线程状态ThreadState 在C#中,线程对象Thread使用ThreadState属性指示线程状态,它是带Flags特性的枚举类型对象. ThreadState 为线程定义了一组所有可能的执 ...

  8. MS SQLServer 2008数据库处于SUSPECT情况下的处理

    做任何恢复操作之前,请先备份.mdf, .ndf和.ldf文件. use master go --将处于suspect状态下的数据库设置为紧急状态 alter database <Databas ...

  9. 虚拟机启动linux系统报错,此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态

    在使用虚拟机启动linux的时候报错,如下: 已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作. 此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态. ...

随机推荐

  1. 【转】小议Bug敏感度---Bug敏感度的故事(一)

    在测试圈中,相信大家对“Bug敏感度”这一词并不陌生,但是Bug敏感度具体是指什么呢,本文对此关键词进行解读的基础上,对其与软件质量的关系,影响的关键因素,如何提高测试人员的bug敏感度进行分享.(- ...

  2. C# winCE连接SQL数据库

    General network error.  Check your network documentation. 错误解决方法 1. public static string Sqlstr = &q ...

  3. ThinkPHP函数详解:cookie方法

    cookie函数也是一个多元化操作函数,完成cookie的设置.获取和删除操作. Cookie 用于Cookie 设置.获取.删除操作 用法cookie($name, $value='', $opti ...

  4. HDU-1031(水题)

    Design T-Shirt Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) P ...

  5. [理解ASP.NET Core框架]一个五十行的控制台Web

    在阅读了Artech的ASP.NET Core管道深度剖析(2):创建一个“迷你版”的管道来模拟真实管道请求处理流程之后, 自己做了一个"迷你版"中的"迷你版" ...

  6. WCF学习系列一_创建第一个WCF服务

    原创作者:灰灰虫的家http://hi.baidu.com/grayworm WCF开发实战系列一:创建第一个WCF服务 在这个实战中我们将使用DataContract,ServiceContract ...

  7. 2013年10月13日学习:SQL通过命令语句来创建表

    优点:操作简单,不容易出错,易于调试 缺点:需要记住命令.命令多了就容易混淆,是吧!但是熟悉了时间长了就OK了! step 1. 新建数据库,命名为Test 点击图形化界面中的新建查询,此时就可以输入 ...

  8. C++编程注意事项

    1.所有成员变量在构造函数中进行初始化操作,如指针赋值为空,bool赋值为FALSE(默认为TRUE); 2.构造函数与析构函数配对出现,执行反向操作,保证执行析构之后,没有遗留问题存在: 3.如果需 ...

  9. DLL中导出STL模板类的问题

    接上一篇. 上一篇的dll在编译过程中一直有一个警告warning C4251: ‘CLASS_TEST::m_structs’ : class ‘std::vector<_Ty>’ ne ...

  10. ios PromiseKit

    简介: 高级开发是高度异步的,PromiseKit收集了一些帮助函数,让我们开发过程中使用的典型异步模式更加令人愉悦. 1.通过pod安装promisekit: 2. promise.h介绍 @imp ...