客戶端與伺服器新建套接字連接的一種方法 背景 最近在做一個C/S文件管理系統,想要把客戶端命令跟文件的傳輸分開進行,這就要求我們重新在客戶端與伺服器之間建立一個新的套接字連接。 問題 首先我們知道C/S伺服器每接到一個客戶的鏈接請求後,都將建立一個新的 ...
客戶端與伺服器新建套接字連接的一種方法
背景
最近在做一個C/S文件管理系統,想要把客戶端命令跟文件的傳輸分開進行,這就要求我們重新在客戶端與伺服器之間建立一個新的套接字連接。
問題
首先我們知道C/S伺服器每接到一個客戶的鏈接請求後,都將建立一個新的線程用於為客戶服務,在高併發的情況下,伺服器可能會同時開啟相當多的線程,在這些服務線程中,如果有相當一部分客戶要求進行文件傳輸,那我們就不得不在每一個線程中打開一個新的埠用於供客戶連接,但是每個線程中的埠又不能重覆,這就造成了大量埠的浪費,甚至造成埠不夠用的情況。
解決方案
最後的解決方案其實挺簡單,即我們的ServerSocket由客戶端建立,並將所使用的新埠號通知伺服器,而後伺服器向客戶端發起連接。這樣,需求就從本來需要伺服器打開大量埠號變為每個客戶端自行打開一新的埠號並由伺服器發起連接。
豈不美哉?悲劇之處
在解決完這個問題之後,突然發現,首先呢就是我的伺服器是在內網中的。。於是一個文件管理系統,最後變成了一個區域網文件管理系統。
具體原因見 你的寬頻ip地址被100.64了嗎?
其次,看完FTP協議後,我發現自己想了半天得到的解決方案原來在FTP協議里早就給出瞭解決方法。