2012-03-20 102 views
14

我有一个客户端应用程序,它从用户的浏览器作为Java applet运行,并通过给定的端口连接到服务器。服务器正在可公开访问的云上运行。根据我以前编写套接字代码的经验,我可以决定一个随机端口号(如5999)并将其用于客户端服务器通信。但是在这种情况下,客户端可以是任何用户机器,并且可以有许多用户访问服务器。如何决定互联网上的客户端和服务器通信之间的端口号

所以问题是如何确保我使用的端口号最不可能被客户端计算机上的任何其他服务使用。

我也为此探索了基于webservices的协议,但我没有使用它,原因是我的要求非常简单,可以通过简单的套接字通信和自定义协议来实现。我感觉webservices工具和SOAP,CORBA等重量太重。

回答

8

选择一个不在Service Name and Transport Protocol Port Number Registry并希望最好。

此外,客户端可以连接到同一端口上的许多服务器。当客户端连接时,他们将在那里使用随机端口。

只有服务器需要担心使用自由端口,客户端需要知道这个端口是什么,否则他们将无法连接到您的服务器。

+0

感谢输入,我假定客户端也绑定在该端口上,所以如果端口被另一个应用程序占用,那么客户端将无法通信。 – Shyam 2012-03-20 14:41:28

+0

@TimeKeeper不太确定链接中的变化。有一些否定了我正在努力的观点。是的,可能有一个“官方”名单,但在一天结束时,这并不意味着下蹲。没有什么东西可以停止使用(或多或少)任何端口的服务,并阻止某些希望使用该端口的其他服务。假设你的程序总是能够绑定到某个固定的端口来收听,你会很愚蠢。 – thecoshman 2013-09-18 09:58:25

+0

你的观点是有效的,并保留你的短语“最好的希望”。但是,由于我们正在讨论已知端口的列表,因此我们可能会使用真实的端口而不是维基百科的近似值,因此您建议选择不在列表中的端口更值得。 – 2013-09-19 20:05:40

2

您不必在用户PC上选择一个端口号。只是服务器端口必须是一个特定的数字。

当客户端连接到服务器IP和端口号时,操作系统为客户端自己选择一个随机空闲端口。

0

有很多人因为@thecoshman提到了,我整理了一些他们的快速参考:)

258,285,325-332,334-343,703,708,717-728,732 -740,743,745-746,755-757,766,768,778-779,781-785,787,788-799,803-809,811-827,834-846,849-852,855-859 ,863-872,874-885,889-899,904-909,914-952,954-988,1002-1007,1009,1491,2194-2196,2259,2369,2388,2794,2873,3092,3126 ,3301,3546,3694,3994,4048,4144,4194-4196,4198,4315,4317-4319,4332,4337-4339,4363-4365,4367,4380-4388,4397-4399,4424,4434-4440 ,4459-4483,4489-99,4501,4503-4533,4539-4544,4560-4562,4564-4565,4571-4572,4574-4589,4606-4620,4622-4657,4693-4699,4705-4710 ,4712-4724,4734-4736,4748,4757-4773,4775-4783,4792-4799,4805-4826,4828-4836, 4852-4866,4882-4875,4886-4893,4895-4898,4903-4911,4916-4935,4938-4939,4943-4948,4954-4968,4972-4979,4981-4983,4992-4998

相关问题