当前位置: 首页 > news >正文

【软件教程】如何用C++检查TCP或UDP端口是否被占用

一、检查步骤

  1. 使用socket函数创建socket_fd套接字。
  2. 使用sockaddr_in结构体配置协议和端口号。
  3. 使用bind函数尝试与端口进行绑定,成功返回0表示未被占用,失败返回-1表示已被占用。

二、CODE

其中port需要修改为想要检测的端口号,也可以将代码改写为根据argv参数检测。

#include <iostream>
#include <winsock2.h> // Windows套接字编程头文件
// #include <sys/socket.h> // Unix/Linux套接字编程头文件
#include <Windows.h>

int main() {
    // WSAStartup用于初始化 Winsock 库,它在进行套接字编程之前需要调用。
    // MAKEWORD(2,2)表示请求2.2版本
    // wsaData用于接收WinSock初始化的信息
    WSADATA wsaData;
    int iResult = WSAStartup(MAKEWORD(2, 2), &wsaData);
    if (iResult != NO_ERROR) {
        wprintf(L"WSAStartup failed with error: %ld\n", iResult);
        return 1;
    }
	// 上面代码只有windows需要加,linux不需要


    int port = 80; // 要检查的端口号

    // 创建套接字
    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); // For Windows
    // int sock = socket(AF_INET, SOCK_STREAM, 0); // For Unix/Linux
    
    if (sock == INVALID_SOCKET) {
        std::cerr << "Error creating socket" << std::endl;
        return 1;
    }
	
    // 设置服务器地址信息
    sockaddr_in serverAddress;
    // 将serverAddress内存全部写0
    ZeroMemory(&serverAddress,sizeof(serverAddress));
    serverAddress.sin_family = AF_INET;
    serverAddress.sin_port = htons(port);
    serverAddress.sin_addr.s_addr = INADDR_ANY;

    // 尝试绑定套接字到指定端口
    int result = bind(sock, (struct sockaddr*)&serverAddress, sizeof(serverAddress));

    if (result == 0) {
        std::cout << "Port " << port << " is available" << std::endl;
    } else {
        std::cerr << "Port " << port << " is already in use" << std::endl;
    }

    // 关闭套接字
    closesocket(sock); // For Windows
    // close(sock); // For Unix/Linux

    return 0;
}

三、运行结果

  1. 使用以下命令行编译cpp代码,其中checkPort.cpp为源文件,checkPort为输出可执行文件,-lws2_32用于链接Windows的Winsock2库。
    g++ .\checkPort.cpp -o checkPort -lws2_32
  2. 以下命令行运行可执行文件
    .\checkPort.exe
  3. 如果端口未被占用,则会输出以下内容。
    在这里插入图片描述
  4. 如果端口已被占用,则会输出以下内容。
    在这里插入图片描述
  5. 如果windows下输出以下内容,一般来说是因为WSAStartup没有配置。
    在这里插入图片描述

相关文章:

  • Arrays 中的 asList()方法
  • MS COCO数据集的评价标准以及不同指标的选择推荐(AP、mAP、MS COCO、AR、@、0.5、0.75、1、目标检测、评价指标)
  • Android帧率监测与优化技巧
  • GRS不止局限于纺织行业
  • 安防监控项目---环境配置
  • 浅谈中国汽车充电桩行业市场状况及充电桩选型的介绍
  • pytorch 入门 (五)案例三:乳腺癌识别识别-VGG16实现
  • RESTful 基础知识
  • 微信小程序——后台交互
  • 在Web中搜索(Searching the Web, ACM/ICPC Beijing 2004, UVa1597)rust解法
  • 【Zero to One系列】微服务Hystrix的熔断器集成
  • Pytorch - 数据增广
  • esp32-S3 + visual studio code 开发环境搭建
  • 垃圾收费站
  • SpringDoc上传附件或文件 - Swagger3
  • 景联文科技提供4D-BEV标注工具:提升自动驾驶感知能力的精准数据支持
  • 如何在linux服务器上安装Anaconda与pytorch,以及pytorch卸载
  • 深入理解 Document Load 和 Document Ready 的区别
  • 深度学习:激活函数曲线总结
  • 关于多个elementui的cascader级联组件页面滚动渲染样式导致卡顿问题
  • 明天起,沪苏湖高铁、杭温高铁推出13款新型票制产品
  • 农行原首席专家兼浙江省分行原行长冯建龙主动投案,正接受审查调查
  • 民生访谈|摆摊设点、公园搭帐篷、行道树飘絮,管理难题怎么解?
  • 李翔宁:城市的每个人都参与了上海的建造,这一过程还在持续
  • 抗战回望16︱《青年生活》《革命青年》:抗战与青年
  • 5名中国公民在美国交通事故中遇难