TCP与UDP段结构中端口地址都是16比特,可以有在0---65535范围内的端口号。对于这65536个端口号有以下的使用规定:

(1)端口号小于256的定义为常用端口,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1---1023之间的端口号,是由IANA来管理的;

(2)客户端只需保证该端口号在本机上是惟一的就可以了。客户端口号因存在时间很短暂又称临时端口号;

(3)大多数TCP/IP实现给临时端口号分配1024---5000之间的端口号。大于5000的端口号是为其他服务器预留的。

那么如何随机获取一个可用端口号呢,我们首先可以调用如下方法获取所有已用端口,随机取出一个1024--65535之间的端口,然后判断此端口是否被占用,如果被占用,继续取随机端口,直到取出未占用的随机端口即可。

/// <summary>

/// 获取操作系统已用的端口号

/// </summary>

/// <returns></returns>

public static IList PortIsUsed()

{

  //获取本地计算机的网络连接和通信统计数据的信息

  IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();

//返回本地计算机上的所有Tcp监听程序

  IPEndPoint[] ipsTCP = ipGlobalProperties.GetActiveTcpListeners();

  //返回本地计算机上的所有UDP监听程序

  IPEndPoint[] ipsUDP = ipGlobalProperties.GetActiveUdpListeners();

//返回本地计算机上的Internet协议版本4(IPV4 传输控制协议(TCP)连接的信息。

  TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections();

IList allPorts = new ArrayList();

  foreach (IPEndPoint ep in ipsTCP)

  {

    allPorts.Add(ep.Port);

  }

foreach (IPEndPoint ep in ipsUDP)

  {

    allPorts.Add(ep.Port);

  }

  foreach (TcpConnectionInformation conn in tcpConnInfoArray)

  {

    allPorts.Add(conn.LocalEndPoint.Port);

  }

   return allPorts;

}

转载于:https://www.cnblogs.com/moonlight-zjb/p/3490652.html

C# 获取随机可用端口号相关推荐

  1. c++获取可用端口号_PG高可用架构实施方案

    1.PG概述 PostgreSQL是一个功能非常强大的.源代码开放的客户/服务器关系型数据库管理系统(RDBMS).PostgreSQL最初设想于1986年,当时被叫做Berkley Postgres ...

  2. 用python获取usb设备端口号,用Python查询连接的USB设备信息的简单方法?

    如何在Python中查询连接的USB设备信息? 我想得到UID设备名(例如:SonyEricsson W660),设备路径(例如:dev/ttyACM0) 此外,上述信息中的最佳参数是什么,以便在设备 ...

  3. QT udp自动获取对方ip和端口号

    Tip: 用printf打印QString方法如下: QString output printf("%s\n",output.toStdString().data()); 正文:Q ...

  4. java获取本机IP,系统随机分配端口号,获取当前线程ID

    ServerSocket serverSocket = null; //读取空闲的可用端口 String localIp = null; try {serverSocket = new ServerS ...

  5. windows如何获取端口号

    一.win+R打开运行菜单,并输入cmd进入命令提示行 二.在命令提示行输入netstat -ano即可获取所有ip地址与端口号(端口号为ip地址冒号后面的数字)

  6. 获取本机ip和端口号

    获取本机ip window.location.hostname 获取端口号 location.port 获取主机名+端口号 location.host 示例 console.log('ip:'+loc ...

  7. 获取游戏服务器ip与端口信息,查看游戏服务器ip端口号

    查看游戏服务器ip端口号 内容精选 换一换 OBS Browser+是一款用于访问和管理对象存储服务的图形化工具,支持通过配置内网DNS服务器地址的方式,使在华为云上的Windows ECS通过内网直 ...

  8. netstat -anp |awk |cut 通过pid获取应用程序的端口号

    脚本如下 #下列 | 表示接续处理. netstat -anopt |grep $pid|head -n 1|awk '{printf $4}'|cut -d: -f4 脚本解释 netstat -a ...

  9. 实时获取端口号和ip地址(域名)

    使用自定义获取端口号和ip地址(域名)window.location 在项目当中,很多项目是属于外包的,当项目做完就需要部署然后交给甲方,那么此时项目就不是我们负责 端口号,和域名,后期因为部署到服务 ...

最新文章

  1. searchsploit漏洞查找工具使用指南(exploit-db.com 离线工具 exploitdb)
  2. OpenCV基于ARM的Linux系统的交叉编译
  3. 当前线程不在单线程单元中,因此无法实例化 ActiveX 控件“8856f961-340a-11d0-a96“...
  4. final、finally与finalize的区别
  5. web browser 发展史
  6. 4核处理器_买电脑选4核、6核还是8核,从业是十年的专家终于讲清楚了差异
  7. 30多套API接口,还怕满足不了你的量化交易需求?
  8. Servlet中上传下载模板代码
  9. 我经常登录的GIS专业论坛
  10. 宇视服务器硬件如何安装,宇视科技无需后端平台与服务器支撑 即可形成小型人脸识别方案...
  11. vagrant设置磁盘大小
  12. python的取整和取余_python中取整运算符
  13. 冬天来了,分享几个网页下雪js特效
  14. node爬取某app数据_使用NodeJs,实现数据抓取
  15. 05——驾校科目一考试系统——验证账号密码
  16. 截至2015年工作中接触集成过的硬件设备整理记录
  17. 配置小程序开发者工具及其使用(下)
  18. iOS 在线JSON转模型工具(Swift、Objective-C、Java)
  19. 怎么设置邮箱自动回复?哪个品牌邮箱自动回复设置最简单?
  20. 12个Material Design风格控件的使用

热门文章

  1. 【Linux系统编程】进程的控制:结束进程、等待进程结束
  2. vector 查找_同样是Excel中的查找函数,这个函数却比VLOOKUP功能强100倍
  3. MySQL的用户和授权
  4. 微信小程序封装的Promise工具类 ES6语法
  5. C++中 引用与取地址的区别
  6. 使用debug工具修改寄存器中的值
  7. 如何删除wordpress侧边栏功能的wordpress.org链接
  8. FatFsVersion0.01源码分析
  9. CF-557 E. Ann and Half-Palindrome(暴力Trie)
  10. 折纸机器人的步骤图解_儿童节特辑丨为你精选二十款超好玩的折纸玩具,这么多总有你的菜!...