如何在Socket编程中检测端口是否被占用
来源:互联网 发布:人工智能产品设计 编辑:程序博客网 时间:2024/05/19 18:46
一般检测一个端口是否被占用的方法是看bind是否成功,但感觉上这个方法有点不合适,其实在Windows中有两个API可以获取到当前系统端口的占用情况(GetTcpTable/GetUdpTable),利用这两个函数就可检测端口占用情况。
以下分别是TCP和UDP的检测方法:
const static STDMETHODIMP GetPortState(ULONG nPort, ULONG *nStateID)
{
MIB_TCPTABLE TcpTable[100];
DWORD nSize = sizeof(TcpTable);
if(NO_ERROR == GetTcpTable(&TcpTable[0],&nSize,TRUE))
{
DWORD nCount = TcpTable[0].dwNumEntries;
if (nCount > 0)
{
for(DWORD i=0;i<nCount;i++)
{
MIB_TCPROW TcpRow = TcpTable[0].table[i];
DWORD temp1 = TcpRow.dwLocalPort;
int temp2 = temp1 / 256 + (temp1 % 256) * 256;
if(temp2 == nPort)
{
*nStateID = TcpRow.dwState;
return S_OK;
}
}
}
return S_FALSE;
}
return S_FALSE;
}
const static BOOL PortUsedTCP(ULONG uPort)
{
MIB_TCPTABLE TcpTable[100];
DWORD nSize = sizeof(TcpTable);
if(NO_ERROR == GetTcpTable(&TcpTable[0],&nSize,TRUE))
{
DWORD nCount = TcpTable[0].dwNumEntries;
if (nCount > 0)
{
for(DWORD i=0;i<nCount;i++)
{
MIB_TCPROW TcpRow = TcpTable[0].table[i];
DWORD temp1 = TcpRow.dwLocalPort;
int temp2 = temp1 / 256 + (temp1 % 256) * 256;
if(temp2 == uPort)
{
return TRUE;
}
}
}
return FALSE;
}
return FALSE;
}
当然,如果在较复杂系统环境下,端口占用表可能随时改变,可能存在两个以上进程使用上述方法检测到同一空闲端口,在这种情况下,就可结合Bind方法进行端口选择。
转自 http://blog.csdn.net/cn_xinxin/article/details/2282801
- 如何在Socket编程中检测端口是否被占用
- 如何在Socket编程中检测端口是否被占用
- Socket编程中检测端口是否被占用
- Socket编程中检测端口是否被占用
- 如何检测网络端口是否被占用
- 如何检测网络端口是否被占用
- 如何检测网络端口是否被占用
- 检测TCP端口号是否被占用
- java检测端口号是否被占用
- python 检测端口是否被占用
- 使用Socket判断端口是否被占用
- c# socket 判断端口是否被占用
- 在FMS编程检测摄像头是否被占用
- 检测80端口是否被占用及如何释放80端口的方法
- 如何查看端口是否被占用
- 如何查询端口号是否被占用
- 如何查看端口是否被占用
- 如何查看端口是否被占用
- html修炼养成--一些问题
- 整合阿里云OSS文件上传2
- MySQl字符串类型
- android 内存溢出 Java.lang.OutOfMemoryError
- Javascript题贰
- 如何在Socket编程中检测端口是否被占用
- PHP中使用RSA加密总结
- iOS崩溃调试的使用和技巧总结
- SqlServer-建立触发器实例
- iOS开发 使用Xcode自带的Leaks:动态的检测内存泄露
- vs2010 解决方案项目 属性配置
- MySQL性能分析及explain的使用
- 关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系
- 零基础学习jQuery-----第一篇