当前位置: 首页 > 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/Linuxif (sock == INVALID_SOCKET) {std::cerr << "Error creating socket" << std::endl;return 1;}// 设置服务器地址信息sockaddr_in serverAddress;// 将serverAddress内存全部写0ZeroMemory(&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/Linuxreturn 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没有配置。
    在这里插入图片描述

相关文章:

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

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用bind函数尝试与端口进行绑定&#xff0c;成功返回0表示未被占用&#xff0c;失败返回-1表示已被占用。 二、CODE 其中port需要修改为想要检测的端口号&#xff0c;也可以将代码…...

Flutter报错RenderBox was not laid out: RenderRepaintBoundary的解决方法

文章目录 报错问题分析问题原因 解决办法RenderBox was not laid out错误的常见原因常见原因解决方法 RenderRepaintBoundaryRenderRepaintBoundary用途 报错 RenderBox was not laid out: RenderRepaintBoundary#d4abf relayoutBoundaryup1 NEEDS-PAINT NEEDS-COMPOSITING-BI…...

0基础学习PyFlink——用户自定义函数之UDAF

大纲 UDAF入参并非表中一行&#xff08;Row&#xff09;的集合计算每个人考了几门课计算每门课有几个人考试计算每个人的平均分计算每课的平均分计算每个人的最高分和最低分 入参是表中一行&#xff08;Row&#xff09;的集合计算每个人的最高分、最低分以及所属的课程计算每课…...

MVC架构_Qt自己的MV架构

文章目录 前言模型/视图编程1.先写模型2. 视图3. 委托 例子&#xff08;Qt代码&#xff09;例1 查询本机文件系统例2 标准模型项操作例3 自定义模型示例:军事武器模型例4 只读模型操作示例例5 选择模型操作例6 自 定 义委 托(在testSelectionModel上修改) 前言 在Qt中&#xf…...

CentOS - 安装 Elasticsearch

"Elasticsearch"是一个流行的开源搜索和分析引擎&#xff0c;它可以用于实时搜索、日志和事件数据分析等任务。以下是在 CentOS 上安装 Elasticsearch 的基本步骤&#xff1a; 安装 Java&#xff1a; Elasticsearch 是基于 Java 的应用程序&#xff0c;所以首先需要…...

IDEA 断点高阶

一、按钮介绍 1.1 补充 返回断点处&#xff1a; 设置debug配置&#xff1a; 二、增加/切换debugger视图 三、window快捷键 所在行处&#xff1a; CtrlF8断点属性编辑&#xff1a; CtrlShiftF8 四、一些常用的高级功能 4.1 查看对象内存-Attach memory agent 1.勾选Atta…...

Qt中的单例模式

QT单例类管理信号和槽函数 Chapter1 Qt中的单例模式一、什么是单例模式&#xff1f;二、Qt中单例模式的实现2.1、静态成员变量2.2、静态局部变量2.3、Q_GLOBAL_STATIC 宏实例2 三、使用场景四、注意事项 Chapter2 QT单例类管理信号和槽函数一、创建单例类二、主界面添加组件三、…...

ROS自学笔记十五:URDF工具

要使用工具之前&#xff0c;首先需要安装&#xff0c;安装命令: sudo apt install liburdfdom-tools 1.check_urdf 语法检查 在ROS中&#xff0c;你可以使用.check_urdf命令行工具来对URDF&#xff08;Unified Robot Description Format&#xff09;文件进行语法检查和验证。…...

Pytorch代码入门学习之分类任务(三):定义损失函数与优化器

一、定义损失函数 1.1 代码 criterion nn.CrossEntropyLoss() 1.2 损失函数简介 神经网络的学习通过某个指标表示目前的状态&#xff0c;然后以这个指标为基准&#xff0c;寻找最优的权重参数。神经网络以某个指标为线索寻找最优权重参数&#xff0c;该指标称为损失函数&am…...

【Linux】安装VMWare虚拟机(安装配置)和配置Windows Server 2012 R2(安装配置连接vm虚拟机)以及环境配置

前言&#xff1a; 一、操作系统简介 1、什么是操作系统 操作系统是一种软件&#xff0c;它管理计算机系统的硬件和软件资源&#xff0c;并提供给用户和应用程序接口&#xff0c;使它们能够与计算机系统交互和运行。操作系统负责调度和分配系统资源&#xff0c;例如处理器、内存…...

Python入口顶部人体检测统计进出人数

程序示例精选 Python入口顶部人体检测统计进出人数 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《Python入口顶部人体检测统计进出人数》编写代码&#xff0c;代码整洁&#xff0c;规则&a…...

移动端自动化-Appium元素定位

文章目录 Appium元素定位第一类&#xff1a;属性定位第二类&#xff1a;路径定位 常见问题理解appium server 和 appium inspector 以及 appium-python-client的关系 appium是跨平台的&#xff0c;支持OSX&#xff0c;Windows以及Linux系统。它允许测试人员在不同的平台&#x…...

menuconfig 图形化配置原理说明三

一. 简介 本文继续简单了解一下&#xff0c;uboot的图形化配置原理。具体了解 Kconfig语法。 之前文章了解了几个 Kconfig语法。地址如下&#xff1a; menuconfig 图形化配置原理说明二-CSDN博客 二. menuconfig 图形化配置之 Kconfig语法 1. config 条目 顶层 Kconfig …...

Ansible简介

环境 控制节点&#xff1a;Ubuntu 22.04Ansible 2.10.8管理节点&#xff1a;CentOS 8 组成 Ansible环境主要由三部分组成&#xff1a; 控制节点&#xff08;Control node&#xff09;&#xff1a;安装Ansible的节点&#xff0c;在此节点上运行Ansible命令管理节点&#xff…...

Tomcat+nginx负载均衡和动静分离

Nginx实现负载均衡和动静分离的原理 Nginx实现负载均衡是通过反向代理实现Nginx服务器作为前端&#xff0c;Tomcat服务器作为后端&#xff0c;web页面请求由Nginx服务来进行转发。 但是不是把所有的web请求转发&#xff0c;而是将静态页面请求Ncinx服务器自己来处理&#xff0c…...

全景环视AVM标定

目录 一、前言 二、鱼眼模型 三、标定流程 四、角点提取 4.1 亚像素坐标计算...

【JavaScript】leetcode链表相关题解

【JavaScript】leetcode链表相关题解 一、什么是链表&#xff1f;二、Javascript中的链表三、leetcode相关链表2.两数相加237.删除链表中的节点206.反转链表 &#x1f48e;个人主页: 阿选不出来 &#x1f48e;个人简介: 大三学生&#xff0c;热爱Web前端&#xff0c;随机掉落学…...

洞察运营机会的数据分析利器

这套分析方法包括5个分析工具&#xff1a; 用“描述性统计”来快速了解数据的整体特点。用“变化分析”来寻找数据的问题和突破口。用“指标体系”来深度洞察变化背后的原因。用“相关性分析”来精确判断原因的影响程度。用“趋势预测”来科学预测未来数据的走势&#xff0c;...

使用Python实现文字的声音播放

winsound 是 Python 的一个内置模块&#xff0c;它提供了访问 Windows 操作系统的声音播放功能的接口。这个模块可以用来播放简单的声音&#xff0c;例如提示音或者短促的音效。 # Author : 小红牛 # 微信公众号&#xff1a;WdPython import win32com.client import winsound#…...

gulp自动化构建

什么是Gulp? Gulp是一种前端开发过程中广泛使用的自动化构建工具&#xff0c;它是基于Node.js构建的&#xff0c;能够极大地提高开发效率和代码质量。Gulp的主要功能包括文件的压缩、合并、重命名等&#xff0c;同时它也支持文件监听和浏览器自动刷新等功能。使用Gulp&#x…...

java时间解析生成定时Cron表达式工具类

Cron表达式工具类CronUtil 构建Cron表达式 /****方法摘要&#xff1a;构建Cron表达式*param taskScheduleModel*return String*/public static String createCronExpression(TaskScheduleModel taskScheduleModel){StringBuffer cronExp new StringBuffer("");if(…...

JavaEE 网络原理——TCP的工作机制(末篇 其余TCP特点)

文章目录 一、滑动窗口二、流量控制三、拥堵控制四、延时应答五、捎带应答六、面向字节流七、异常情况八、总结 其余相关文章&#xff1a; JavaEE 网络原理——TCP的工作机制(中篇 三次握手和四次挥手) 本篇文章衔接的是前面两篇文章的内容&#xff0c;在这里继续解释 TCP 的内…...

【软件测试】了解JUnit单元测试框架常用注解

目录 1、认识JUnit 2、Junit中常见的注解 1、Test 2、Disabled 3、BeforeAll和AfterAll 4、BeforeEach和AfterEach 5、 ParameterizedTest&#xff1a;参数化 6、order 3、断言 1、断言相等【Assertions.assertEquals(预期&#xff0c;比较值)】&#xff1b;相等测试通…...

【广州华锐互动】三维全景3D消防科普展馆

在我们的日常生活中&#xff0c;火灾安全是一个不容忽视的重要问题。然而&#xff0c;由于缺乏对火灾的了解和应对技巧&#xff0c;许多人在面对火灾时往往感到无助和恐慌。为了解决这个问题&#xff0c;广州华锐互动开发了三维全景3D消防科普展馆&#xff0c;它是一个以虚拟现…...

某大型车企:加强汽车应用安全防护,开创智能网联汽车新篇章

​某车企是安徽省最大的整车制造企业&#xff0c;致力于为全球消费者带来高品质汽车产品和服务体验&#xff0c;是国内最早突破百万销量的汽车自主品牌。该车企利用数字技术推动供应链网络的新型互动&#xff0c;加快数字化转型&#xff0c;持续进行场景创新、生态创新&#xf…...

LLVM学习笔记(50)

4.1.4. DAG合并与合法化 来自SelectionDAGBuilder的SelectionDAG输出还不能进行指令选择&#xff0c;必须通过额外的转换——显示在上图。在指令选择前应用的遍序列如下&#xff1a; 匹配一组节点&#xff0c;在有利时使用更简单的构造来替换它们&#xff0c;DAG合并遍优化Se…...

rpc入门笔记0x01

syntax "proto3"; // 这是个proto3的文件message HelloRequest{ // 创建数据对象string name 1; // name表示名称&#xff0c;编号是1 }生成python文件 安装grpcio和grpcio-tools库 pip install grpcio #安装grpc pip install grpcio-tools #安装grpc tools生成…...

web - Tomcat服务器

文章目录 目录 文章目录 前言 一 . CS和BS的异同 二 . 什么是Tomcat 二 . Tomcat安装 四 . Tomcat目录结构 bin目录: 用于存放二进制的可执行文件 config目录 server.xml&#xff1a;配置整个服务器信息。例如修改端口号。默认HTTP请求的端口号是&#xff1a;8080 lib目录 log…...

后端接口返回常见的状态码

2开头 &#xff08;请求成功&#xff09;表示成功处理了请求的状态代码 200 &#xff08;成功&#xff09; 服务器已成功处理了请求。 通常&#xff0c;这表示服务器提供了请求的网页。 201 &#xff08;已创建&#xff09; 请求成功并且服务器创建了新的资源。 202 &#xf…...

50.MongoDB快速入门实战

MongoDB概念 MongoDB是一个文档数据库&#xff08;以 JSON 为数据模型&#xff09;&#xff0c;由C语言编写&#xff0c;旨在为WEB应用提供可扩展的高性能数据存储解决方案。 原则上 Oracle 和 MySQL 能做的事情&#xff0c;MongoDB 都能做&#xff08;包括 ACID 事务&#x…...