开箱即用之 windows判断端口是否被占用

文章讲述了如何使用`netstat-ano`命令行工具查询所有端口并搜索8888端口,以及通过Java编程语言中的`Socket`类检测端口占用情况,包括处理`localhost`和`IOException`的示例。
摘要由CSDN通过智能技术生成

控制台命令查询

netstat -ano|findstr 8888

解释

netstat -ano查询所有的端口,然后通过管道符进行过滤,寻找指定的8888端口。

Java代码查询

    /**
     * 判断传入端口是否被占用,host传入空值就是查询本机的端口
     * @param host ip
     * @param port 端口
     * @return true/false
     */
    private static boolean isPortInUse(String host, int port)
    {
        try (Socket socket = new Socket())
        {
            if (ObjectUtil.isEmpty(host))
            {
                host = "localhost";
            }
            socket.connect(new InetSocketAddress(host, port), 1000); // 如果连接成功,说明端口被占用
            return true;
        } catch (IOException e)
        {
            return false;
        }
    }

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Windows API中,可以使用`GetTcpTable()`函数和`GetUdpTable()`函数来获取当前系统中正在使用的TCP和UDP端口信息。通过遍历这些信息,可以判断指定的端口是否占用。 以下是使用`GetTcpTable()`函数和`GetUdpTable()`函数判断指定端口是否占用的示例代码: ```c++ #include <winsock2.h> #include <iphlpapi.h> #include <stdio.h> #pragma comment(lib, "iphlpapi.lib") #pragma comment(lib, "ws2_32.lib") bool IsPortInUse(USHORT port, bool isTCP) { PMIB_TCPTABLE pTcpTable; PMIB_UDPTABLE pUdpTable; DWORD dwSize = 0; DWORD dwRetVal = 0; bool bInUse = false; if (isTCP) { pTcpTable = (PMIB_TCPTABLE)malloc(sizeof(MIB_TCPTABLE)); if (pTcpTable == NULL) { printf("Error allocating memory\n"); return false; } dwSize = sizeof(MIB_TCPTABLE); dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE); if (dwRetVal == ERROR_INSUFFICIENT_BUFFER) { free(pTcpTable); pTcpTable = (PMIB_TCPTABLE)malloc(dwSize); if (pTcpTable == NULL) { printf("Error allocating memory\n"); return false; } dwRetVal = GetTcpTable(pTcpTable, &dwSize, TRUE); } if (dwRetVal != NO_ERROR) { printf("GetTcpTable failed with error %d\n", dwRetVal); free(pTcpTable); return false; } for (DWORD i = 0; i < pTcpTable->dwNumEntries; i++) { if (pTcpTable->table[i].dwLocalPort == htons(port)) { bInUse = true; break; } } free(pTcpTable); } else { pUdpTable = (PMIB_UDPTABLE)malloc(sizeof(MIB_UDPTABLE)); if (pUdpTable == NULL) { printf("Error allocating memory\n"); return false; } dwSize = sizeof(MIB_UDPTABLE); dwRetVal = GetUdpTable(pUdpTable, &dwSize, TRUE); if (dwRetVal == ERROR_INSUFFICIENT_BUFFER) { free(pUdpTable); pUdpTable = (PMIB_UDPTABLE)malloc(dwSize); if (pUdpTable == NULL) { printf("Error allocating memory\n"); return false; } dwRetVal = GetUdpTable(pUdpTable, &dwSize, TRUE); } if (dwRetVal != NO_ERROR) { printf("GetUdpTable failed with error %d\n", dwRetVal); free(pUdpTable); return false; } for (DWORD i = 0; i < pUdpTable->dwNumEntries; i++) { if (pUdpTable->table[i].dwLocalPort == htons(port)) { bInUse = true; break; } } free(pUdpTable); } return bInUse; } int main() { USHORT port = 80; bool isTCP = true; if (IsPortInUse(port, isTCP)) { printf("Port %d is in use\n", port); } else { printf("Port %d is not in use\n", port); } return 0; } ``` 在上面的示例代码中,`IsPortInUse()`函数用于判断指定的端口是否占用,其中`port`参数为指定的端口号,`isTCP`参数表示是否为TCP端口。如果端口占用,该函数返回`true`,否则返回`false`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值