本地IPEndPoint创建的端口选择。端口号是否重要?

时间:2013-12-06 22:22:51

标签: c# .net sockets udpclient

这是我第一次使用IPEndPoint,所以原谅我缺乏经验。

如果我像这样创建一个IPEndPoint:

IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("192.168.1.25"), 0);

端口0是否可能已经在使用中,这会产生异常?这里是否有任何类型的约定要使用本地端口号?我应该只使用一个小于65,536的随机生成的数字吗?选择端口是否有最佳或最安全的方法,甚至是否重要?

此特定实例中的用例仅供我学习。我现在正在摆弄发送UDP广播WOL数据包,但后来我希望进入更复杂的代码。我只是想确保我理解最佳实践。

2 个答案:

答案 0 :(得分:2)

首先,您需要检查一下是否在干扰任何standard windows service ports

在这种情况下随机是一种非常糟糕的方式,该端口可能正在被其他应用程序使用。

但你总是go here并选择一些未分配的东西。

在那里,IANA说

  

动态和/或专用端口是49152到65535

的端口

答案 1 :(得分:2)

根据IANA

  

根据三个范围以不同方式分配端口号:   系统端口(0-1023),用户端口(1024-49151),以及动态和/或   私人港口( 49152-65535 );这些范围的差异用途是   在[RFC6335]中描述。系统端口由IETF进程分配   标准跟踪协议,根据[RFC6335]。用户端口已分配   IANA使用“IETF审核”流程,“IESG审批”流程,   或者根据[RFC6335]进行“专家审查”流程。动态端口是   没有分配。

同样来自UdpClient(端口)ctor MSDN文档:

  

如果将0传递给构造函数,则基础服务提供者将分配端口号。