Socket编程中检测端口是否被占用
但在较复杂系统环境下,端口占用表可能随时改变,可能存在两个以上进程使用上述方法检测到同一空闲端口,在这种情况下,可使用Bind方法进行端口选择。
#include <tcpmib.h> #include <IPHlpApi.h> //依赖lib库 Iphlpapi.lib Ws2_32.lib //获取Tcp端口状态 BOOL GetTcpPortState(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 TRUE; } } } return FALSE; } return FALSE; } //获取Udp端口状态 BOOL GetUdpPortState(ULONG nPort, ULONG *nStateID) { MIB_UDPTABLE UdpTable[100]; DWORD nSize = sizeof(UdpTable); if(NO_ERROR == GetUdpTable(&UdpTable[0],&nSize,TRUE)) { DWORD nCount = UdpTable[0].dwNumEntries; if (nCount > 0) { for(DWORD i=0;i<nCount;i++) { MIB_UDPROW TcpRow = UdpTable[0].table[i]; DWORD temp1 = TcpRow.dwLocalPort; int temp2 = temp1 / 256 + (temp1 % 256) * 256; if(temp2 == nPort) { return TRUE; } } } return FALSE; } return FALSE; }
1、原始socket编程时,就使用bind函数判断。
unsigned short usPort = 9090; SOCKET s = socket(AF_INET,SOCK_STREAM,IPPROTO_IP); sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(usPort); addr.sin_addr.s_addr = htonl(INADDR_ANY); bind(s,(LPSOCKADDR)&addr,sizeof(addr)); if(WSAGetLastError()==WSAEADDRINUSE) { //端口已被占用 }
boost::asio::io_service ioService; unsigned short usPort = 9090; udp::socket * pSockUdp = NULL; bool bSockUdpError = false; try{ pSockUdp = new udp::socket(ioService,udp::endpoint(udp::v4(),usPort)); bSockUdpError = false; } catch(...) { bSockUdpError = true; } //释放 if(!bSockUdpError && pSockUdp != NULL) { delete pSockUdp; pSockUdp = NULL; }
Socket编程中检测端口是否被占用的更多相关文章
- python 检测端口是否被占用
前记 python中有些常用的东西,虽然小,但是非常实用.这里就做个备忘吧. 实例 检测端口是否被占用. ''' -- coding: utf-8 -- import os import sock ...
- socket编程中客户端常用函数
1 常用函数 1.1 connect() int connect(int sockfd, const struct sockaddr *servaddr, socklen_taddrlen); 客 ...
- c#检测端口是否被占用
当我们要创建一个Tcp/Ip Server connection ,我们需要一个范围在1000到65535之间的端口 . 但是本机一个端口只能一个程序监听,所以我们进行本地监听的时候需要检测端口是否被 ...
- c#检测端口是否被占用的简单实例
c#检测端口是否被占用的简单实例. 当我们要创建一个Tcp/Ip Server connection ,我们需要一个范围在1000到65535之间的端口 . 但是本机一个端口只能一个程序监听,所以我们 ...
- socket编程中write、read和send、recv之间的区别~转载
socket编程中write.read和send.recv之间的区别 http://blog.csdn.net/petershina/article/details/7946615 一旦,我们建立 ...
- PHP socket 编程中的超时设置
PHP socket 编程中的超时设置.网上找了半天也没找到.贴出来分享之:设置$socket 发送超时1秒,接收超时3秒: $socket = socket_create(AF_INET,SOCK_ ...
- Linux socket 编程中存在的五个隐患
前言: Socket API 是网络应用程序开发中实际应用的标准 API.尽管该 API 简单,但是 开发新手可能会经历一些常见的问题.本文识别一些最常见的隐患并向您显示如何避免它 ...
- Socket编程中的强制关闭与优雅关闭及相关socket选项
以下描述主要是针对windows平台下的TCP socket而言. 首先需要区分一下关闭socket和关闭TCP连接的区别,关闭TCP连接是指TCP协议层的东西,就是两个TCP端之间交换了一些协议包( ...
- windows和linux中检查端口是否被占用
一.windows 1.查询端口占用情况 cmd > netstat -ano 2.查询8080端口是否被占用 cmd > netstat -ano|findstr 8080 3.查询哪个 ...
随机推荐
- C++循环的内存释放问题?
针对http://wenku.baidu.com/view/56d732ee856a561252d36ff2.html的内容测试一下. #include "A.h" #includ ...
- centos6 pip install python-ldap报错
error: Setup script exited with error: command 'gcc' failed with exit status 1 解决方法: 原因是版本不兼容,centos ...
- python webdriver 测试框架-数据驱动excel驱动的方式
简介: 数据驱动excel驱动方式,就是数据配置在excel里面,主程序调用的时候每次用从excel里取出的数据作为参数,进行操作, 需要掌握的地方是对excel的操作,要灵活的找到目标数据 测试数据 ...
- 用python解析word文件(段落篇(paragraph) 表格篇(table) 样式篇(style))
首先需要安装相应的支持库: 直接在命令行执行pip install python-docx 示例代码如下: import docxfrom docx import Document #导入库 path ...
- 【知识总结】Activiti工作流学习入门
1. 我理解的工作流: 在工作中慢慢接触的业务流程,就向流程控制语言一样,一步一步都对应的不同的业务,但整体串联起来就是一个完整的业务.而且实际工作中尤其是在企业内部系统的研发中,确实需要对应许多审批 ...
- Python3.x:os.mkdir与 os.makedirs(创建目录方法)区别
Python3.x:os.mkdir与 os.makedirs区别 1,os.mkdir mkdir( path [,mode] ) 说明: 创建一个目录,可以是相对或者绝对路径,mode的默认模式是 ...
- 【Java----判断字符串是否为有效的日期格式】
public static boolean isValidDate(String str) { boolean convertSuccess=true; // 指定日期格式为四位年/两位月份/两位日期 ...
- 【定义及安装】Ambari——大数据平台的搭建利器
Ambari 是什么 Ambari 跟 Hadoop 等开源软件一样,也是 Apache Software Foundation 中的一个项目,并且是顶级项目.目前最新的发布版本是 2.0.1,未来不 ...
- 关于JS和JSON
讲得不准确! 看网课,JS也算是面向对象的一门语言,不过其是解释性的脚本语言. JSON是把用JS的表示法将数据包装起来进行传递用的. JS语法是松散型的,没有int String这些像JAVA里的类 ...
- Uva 12304 - 2D Geometry 110 in 1!
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...