【软件教程】如何用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没有配置。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/106112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

单元测试到底是什么?应该怎么做?

一、什么是单元测试&#xff1f; 单元测试&#xff08;unit testing&#xff09;&#xff0c;是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小或范围&#xff0c;并没有一个明确的标准&#xff0c;“单元”可以是一个函数、方法、类、功能模块或者子系统。 …

ios ipa包上传需要什么工具

​ 目录 前言 一、IPA包的原理 二、IPA包上传的步骤 2.apk软件制作工具创建应用程序 3.构建应用程序 4.生成证书和配置文件 5.打包IPA包 6.上传IPA包 三、总结 前言 iOS IPA包是iOS应用程序的安装包&#xff0c;可以通过iTunes或者其他第三方应用商店安装到iOS设备上。…

手把手教你安装配置『Oracle Database 19c』

前言 本文将会讲解如何在 Windows 系统上安装 Oracle Database 19c 数据库&#xff0c;适合初学者学习 Oracle 快速入门和实践练习&#xff0c;比较方便快捷 官方安装文档&#xff1a;Preinstallation Considerations for Installing Oracle Database 对于企业级的数据库&am…

网络协议--UDP:用户数据报协议

11.1 引言 UDP是一个简单的面向数据报的运输层协议&#xff1a;进程的每个输出操作都正好产生一个UDP数据报&#xff0c;并组装成一份待发送的IP数据报。这与面向流字符的协议不同&#xff0c;如TCP&#xff0c;应用程序产生的全体数据与真正发送的单个IP数据报可能没有什么联…

提高数据研究效率,优化成果分享及复用|ModelWhale 版本更新

秋高气爽、金桂飘香&#xff0c;十月末&#xff0c;我们又迎来了 ModelWhale 新一轮的版本更新。 本次更新中&#xff0c;ModelWhale 主要进行了以下功能迭代&#xff1a; 新增 添加模型服务到知识库&#xff08;专业版✓ 团队版✓&#xff09; 新增 自动生成数据引用信息&am…

结构伪类选择器

伪类选择器&#xff1a;用来描述一个元素的特殊状态&#xff01;比如第一个元素、某个元素的子元素、鼠标点击的元素 1 first-child/last-child /*ul的第一个子元素*/ ul li:first-child{ background: #0f35ad; } /*ul的最后一个子元素*/ ul li:last-child{ background: #0f3…

C#两个表多条件关联写法

文章目录 C#两个表多条件关联写法两个表实体类准备实体类数据初始化第一种 sql的左关联第二种相当于sql的 INNER JOIN写法一&#xff1a;FROM a FROM b where 多条件关联写法二&#xff1a; FROM JOIN INTO写法三&#xff1a; FROM JOIN 省略into C#两个表多条件关联写法 两个…

Could not update Flowable database schema: unknown version from database:

文章目录 一、出现问题的情况二、解决方法1、 act_ge_property这个表里面的版本改成flowable-engine的版本号2、act_id_property表的schema.version版本也改成和flowable-engine版本一致&#xff08;如图所示&#xff09; 一、出现问题的情况 项目集成flowable流程框架的时候&…

【EI会议征稿通知】第二届材料科学与智能制造国际学术会议(MSIM 2024)

第二届材料科学与智能制造国际学术会议&#xff08;MSIM 2024&#xff09; 2024 2nd International Conference on Materials Science and Intelligent Manufacturing 2024年第二届材料科学与智能制造国际学术会议 &#xff08;MSIM2024&#xff09;将于2024年1月19日至21日在…

pycharm远程连接Linux服务器

文章目录 一&#xff1a;说明二&#xff1a;系统三&#xff1a;实现远程连接方式一&#xff1a; 直接连接服务器不使用服务器的虚拟环境步骤一&#xff1a;找到配置服务器的地方步骤二&#xff1a;进行连接配置步骤三&#xff1a;进行项目文件映射操作步骤四&#xff1a;让文件…

C#中Redis使用简单教程

C#开发者的Redis入门指南 Redis是一个高性能的内存数据库&#xff0c;常用于缓存、队列、实时数据分析等场景。作为一个C#开发者&#xff0c;了解如何使用Redis可以为你的应用程序带来巨大的好处。本文将向你介绍Redis基本概念&#xff0c;并提供一些C#的代码示例来帮助你入门…

QT图形视图框架绘制曲线图和Smith图

QT图形视图框架绘制曲线图和Smith图 QGraphicsView是Qt框架中的一个图形视图部件&#xff0c;用于显示和处理2D图形元素。它提供了强大的工具来创建交互式和自定义的图形应用程序。在绘制折线图和Smith图时&#xff0c;使用QGraphicsView有以下一些优点&#xff1a; 交互性&am…

大语言模型助力审计问题自动定性

国家审计作为以权力监督制约权力的一项制度安排&#xff0c;是党和国家监督体系的重要组成部分&#xff0c;是国家治理大系统中一个内生的具有预防、揭示和抵御功能的“免疫系统”&#xff0c;是国家治理的基石和重要保障&#xff0c;在推进“全面建成小康社会、全面深化改革、…

C++学习笔记之三(标准库、标准模板库、vector类)

C 1、C标准库2、C标准模板库2.1、vector2.1.1、vector与array2.1.2、vector与函数对象2.1.3、vector与迭代器 1、C标准库 C C C标准库指的是标准程序库( S t a n d a r d Standard Standard L i b a r a y Libaray Libaray)&#xff0c;它定义了十个大类&#xff0c;其中包括…

nc65单据穿透

nc65单据穿透 jych项目 1.支出合同台账合同号字段可以穿透到对应的单据上 一个合同号穿透到一个物质设备采购合同上 1.支出合同台账单据模板合同号字段卡片下和列表下高级属性勾选是否超链接 2.支出合同台账中增加监听类 HeadItemLinkListener.java package nc.ui.jych.…

算法通过村第十六关-滑动窗口|黄金笔记|结合堆的应用

文章目录 前言堆与滑动窗口结合的问题总结 前言 提示&#xff1a;不论记忆多么痛苦&#xff0c;它属于过去&#xff0c;已经逝去了&#xff0c;我们为什么还执着于它并让它代表我们&#xff1f;我们就这样&#xff0c;所以&#xff0c;我们受苦。 --丹津葩默 这个还是一个比较重…

LSTM 与 GRU

RNN无法处理长距离依赖问题&#xff0c;通俗点就是不能处理一些较长的序列数据&#xff0c;那么今天就来介绍一下两个能处理长距离依赖问题地RNN变种结构&#xff0c;LSTM和GRU。 1. LSTM&#xff08;Long short-term memory&#xff09; 1.1 LSTM结构 上左图是普通RNN结构图…

目标检测技术概述

什么是目标检测&#xff1f; 在计算机视觉众多的技术领域中&#xff0c;目标检测&#xff08;Object Detection&#xff09;也是一项非常基础的任务&#xff0c;图像分割、物体追踪、关键点检测等通常都要依赖于目标检测。在目标检测时&#xff0c;由于每张图像中物体的数量、…

JAVA入门总结回顾

1.常用的DOS命令&#xff1a;DOS窗口常用命令-CSDN博客 2.检查jdk是否安装成功&#xff1a;在cmd中输入java -version或者java或者javac。出现相应的对应显示内容。 3.JDK&#xff0c;JRE之间的关系&#xff1a;JDK是JAVA的开发工具包&#xff0c;JRE是JAVA的的运行环境。JRE…

硬件安全与机器学习的结合

文章目录 1. A HT Detection and Diagnosis Method for Gate-level Netlists based on Machine Learning摘要Introduction 2. 基于多维结构特征的硬件木马检测技术摘要Instruction 3. A Hardware Trojan Detection and Diagnosis Method for Gate-Level Netlists Based on Diff…