C\C++ 使用socket判断ip是否能连通

文章作者:里海
来源网站:https://blog.csdn.net/WangPaiFeiXingYuan


简介:

使用socket判断ip是否能联通

效果:

代码:

cpp 复制代码
#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();
}
相关推荐
fengfuyao9855 分钟前
基于MATLAB的GUI实现人脸检测、眼睛检测以及LBP直方图显示
开发语言·计算机视觉·matlab
你也向往长安城吗6 分钟前
推荐一个三维导航库:three-pathfinding-3d
javascript·算法
蒋星熠9 分钟前
C++零拷贝网络编程实战:从理论到生产环境的性能优化之路
网络·c++·人工智能·深度学习·性能优化·系统架构
百度智能云22 分钟前
VectorDB+FastGPT一站式构建:智能知识库与企业级对话系统实战
算法
CHANG_THE_WORLD22 分钟前
# C++ 中的 `string_view` 和 `span`:现代安全视图指南
开发语言·c++
雨落倾城夏未凉23 分钟前
9.c++new申请二维数组
c++·后端
Franklin44 分钟前
Python界面设计【QT-creator基础编程 - 01】如何让不同分辨率图像自动匹配graphicsView的窗口大小
开发语言·python·qt
雨落倾城夏未凉1 小时前
8.被free回收的内存是立即返还给操作系统吗?为什么?
c++·后端
雨落倾城夏未凉1 小时前
6.new和malloc的区别
c++·后端
郝学胜-神的一滴1 小时前
深入理解QFlags:Qt中的位标志管理工具
开发语言·c++·qt·程序人生