C\C++ 使用socket判断ip是否能连通
  CiIZfyyIq65u 2023年11月30日 23 0


文章作者:里海


简介:

使用socket判断ip是否能联通

效果:

      

C\C++ 使用socket判断ip是否能连通_NX二次开发

代码:

#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 << "Connected\t";
        else
            std::cout << "NotConnected\t";
        auto end = chrono::steady_clock::now(); // 记录结束时间  
        auto duration = chrono::duration_cast<chrono::milliseconds>(end - start); // 计算执行时间,单位为毫秒  
        cout << "耗时:" << duration.count() << "毫秒" << endl;
    }
    cin.get();
}
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月30日 0

暂无评论

推荐阅读
CiIZfyyIq65u