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.查询哪个 ...
随机推荐
- JAVA优化技巧分享 让游戏更加的流畅
我的世界怎么样可以玩的更加流畅呢?怎么对游戏进行优化呢?相信很多小伙伴都很想知道吧,今天小编为大家带来的是我的世界游戏优化技巧,喜欢的小伙伴不要错 ... 在很多时候如果电脑配置过低的话,玩游戏并不流 ...
- Parallel Decision Tree
Decision Tree such as C4.5 is easy to parallel. Following is an example. This is a non-parallel vers ...
- MySQL5.7多源复制
MySQL5.7开始支持多源复制,也就是多主一从的复制架构: 使用多源复制的考虑: 1.灾备作用:将各个库汇总在一起,就算是其他库都挂了(整个机房都无法连接了),还有最后一个救命稻草: 2.备份:直接 ...
- oauth2(转载http://www.rollosay.com/it/%E4%BD%BF%E7%94%A8OAuth-Server-PHP%E5%AE%9E%E7%8E%B0OAuth2%E6%9C%8D%E5%8A%A1)
http://www.rollosay.com/it/%E4%BD%BF%E7%94%A8OAuth-Server-PHP%E5%AE%9E%E7%8E%B0OAuth2%E6%9C%8D%E5%8A ...
- 牛客国庆集训派对Day2 Solution
A 矩阵乘法 思路: 1° 牛客机器太快了,暴力能过. #include <bits/stdc++.h> using namespace std; #define N 5000 in ...
- python连接mysql,redis类方法
#coding:utf8 import pymysql import redis import conf '''MYSQL DB Object''' class Mysql(): def __init ...
- MyEclipse优化,解决MyEclipse运行慢、卡顿问题
工具: myeclipse2015 2.0 最近想用myeclipse做一下测试,发现myeclipse运行非常卡,直接影响代码的开发,而且还出现软件卡退的情况,让我十分恼火. 一.加大JVM的非 ...
- 20145204《Java程序设计》第3周学习总结
20145204<Java程序设计>第3周学习总结 教材学习内容总结 对象和类. Java有基本类型和类类型这两个类型系统.本章主要介绍类类型.定义类时用关键词class,利用类建立对象实 ...
- ubuntu如何使zsh替换bash
答: 1.安装zsh sudo apt-get install zsh 2.zsh替换bash sudo chsh -s `which zsh` 3.重启 (注:重启后打开一个终端会自动进入zsh的 ...
- UVa 12034 比赛名次(递推)
https://vjudge.net/problem/UVA-12034 题意: A.B两人赛马,最终名次有3种可能:并列第一:A第一B第二:B第一A第二.输入n,求n人赛马时最终名次的可能性的个数除 ...