【软件教程】如何用C++检查TCP或UDP端口是否被占用
- 人工智能
- 2025-08-15 18:03:01

一、检查步骤 使用socket函数创建socket_fd套接字。使用sockaddr_in结构体配置协议和端口号。使用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; } 三、运行结果 使用以下命令行编译cpp代码,其中checkPort.cpp为源文件,checkPort为输出可执行文件,-lws2_32用于链接Windows的Winsock2库。 g++ .\checkPort.cpp -o checkPort -lws2_32以下命令行运行可执行文件 .\checkPort.exe如果端口未被占用,则会输出以下内容。 如果端口已被占用,则会输出以下内容。 如果windows下输出以下内容,一般来说是因为WSAStartup没有配置。【软件教程】如何用C++检查TCP或UDP端口是否被占用由讯客互联人工智能栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【软件教程】如何用C++检查TCP或UDP端口是否被占用”