C/C++使用socket实现判断ip是否能连通

 更新时间:2023年07月19日 17:22:03   作者:王牌飞行员_里海  
这篇文章主要为大家详细介绍了C/C++如何使用socket实现判断ip是否能连通,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下

简介

使用socket判断ip是否能联通

效果

代码

#include <iostream>  
#include <cstdlib>  
#include <cstdio>  
#include <winsock2.h>
#include <string>
#include <chrono>
 
#pragma comment(lib, "ws2_32.lib")
 
using namespace std;
 
bool canConnectToRouter(string ipAddress) 
{
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0)  // 初始化Windows Socket库  
        return false;
 
    int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); // 创建一个TCP socket  
    if (sockfd < 0) 
        return false;
    struct sockaddr_in serveraddr;
    serveraddr.sin_addr.s_addr = inet_addr(ipAddress.c_str());
    serveraddr.sin_family = AF_INET;
    serveraddr.sin_port = htons(139);
 
    int ret = connect(sockfd, (struct sockaddr*)&serveraddr, sizeof(serveraddr)); // 连接服务器  
    if (ret < 0) 
    {
        closesocket(sockfd);
        return false;
    }
 
    closesocket(sockfd);
    return true;
}
 
int main()
{
    for (int i = 0; i < 256; i++)
    {
        string ip = "192.168.16." + to_string(i);
        std::cout << ip << "\t";
        auto start = chrono::steady_clock::now(); // 记录开始时间  
        if (canConnectToRouter(ip.c_str()))
            std::cout << "InCompany\t";
        else
            std::cout << "NotInCompany\t";
        auto end = chrono::steady_clock::now(); // 记录结束时间  
        auto duration = chrono::duration_cast<chrono::milliseconds>(end - start); // 计算执行时间,单位为毫秒  
        cout << "耗时:" << duration.count() << "毫秒" << endl;
    }
    cin.get();
}

到此这篇关于C/C++使用socket实现判断ip是否能连通的文章就介绍到这了,更多相关C++ socket判断ip是否连通内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中的std::async()详解

    C++中的std::async()详解

    这篇文章主要给大家介绍了关于C++中std::async()的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • C/C++字符串函数之复制函数详解

    C/C++字符串函数之复制函数详解

    下面小编就为大家带来一篇C/C++字符串函数之复制函数详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-09-09
  • 解析C语言中空指针、空指针常量、NULL & 0的详解

    解析C语言中空指针、空指针常量、NULL & 0的详解

    本篇文章是对C语言中空指针、空指针常量、NULL & 0 进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 简单谈谈C++ 头文件系列之(bitset)

    简单谈谈C++ 头文件系列之(bitset)

    我们要使用bitset,首先需要包含头文件bitset。和vector对象不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset的时候,要明确bitset包含了多少位,须在尖括号内给出它的长度值。长度值必须定义为整形字面值常量或是已用常量值初始化的整型的const对象
    2017-02-02
  • c语言小游戏程序之弹跳小球的实现代码

    c语言小游戏程序之弹跳小球的实现代码

    这篇文章主要介绍了c语言小游戏程序之弹跳小球的实现代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • OpenCV实现马赛克和毛玻璃滤镜效果

    OpenCV实现马赛克和毛玻璃滤镜效果

    这篇文章主要为大家详细介绍了OpenCV实现马赛克和毛玻璃滤镜效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • 缓存处理函数storageKeySuffix操作示例解析

    缓存处理函数storageKeySuffix操作示例解析

    这篇文章主要介绍了浅析缓存处理函数storageKeySuffix操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • C++优先级队列的使用指南与模拟实现

    C++优先级队列的使用指南与模拟实现

    优先级队列是一种特殊的队列,其中每个元素都有一个与之关联的优先级,优先级较高的元素会在队列中较早地被处理,而优先级较低的元素会在后续处理,本文给大家介绍C++优先级队列的使用指南与模拟实现,需要的朋友可以参考下
    2023-09-09
  • c/c++静态库之间相互调用的实战案例

    c/c++静态库之间相互调用的实战案例

    C++调用C的函数比较简单,直接使用extern "C" {}告诉编译器用C的规则去编译C代码就可以了,下面这篇文章主要给大家介绍了关于c/c++静态库之间相互调用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • C语言版猜数字小游戏

    C语言版猜数字小游戏

    这篇文章主要为大家详细介绍了C语言版猜数字小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07

最新评论