2012-03-20 107 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

相關問題