最近研究了下分布式存儲Fastdfs,在centOS上配置完后,使用centOS或putty連接並上傳圖片,然后用瀏覽器讀取storage server返回的URL,一切正常.
但是,使用eclipse上傳圖片時,報錯:SocketTimeOutException.
報錯行為:String[] strings = storageClient.upload_file("D:\\120.jpg", "jpg", null);
網上查了將近一天,但卻沒有對應的解決方案, 唯一一個比較接近的說法是:tracker server的IP要用外網IP.
但是也沒說很具體.
經過親測,這種方法,對我的問題還是無法解決.
而且,Fastdfs的這個問題,在網上很少有人提及,所以研究了一下.
反復檢查API代碼,確認無誤.
反復檢查Fastdfs的配置,確認無誤.
把tracker server的IP換成外網IP,然后重啟storage server服務,發現卡住,無法重啟.
最后反復檢查配置文件,發現問題:
在storage server的conf中,第23,24行是這個:
# the storage server port
port=23000
這毫無疑問代表了storage server自己的端口號.
而,我們新裝的centOS,默認開啟的端口號,是很少的! 之前的80,8080,22122端口,都是自己后來手動開的.
而這個23000,很可能沒有開啟!!
經過確認,的確如此,開啟這個端口后,eclipse中上傳文件正常! junit綠條!
思考:
為什么前三個端口號能意識到並手動開啟,而這個端口,卻在最后才想到?
因為,在centOS或putty中調試時,前三個沒開的話,就會立即出問題.
但是,第四個端口,在centOS和putty中,即使沒開,也不影響上傳圖片或通過http訪問圖片的URL!
導致自己很難想到這個本身就很簡單的問題.
端口查看及開啟方式:
在centOS服務器或putty中:
1.查看打開的端口:
#/etc/init.d/iptables status
2.手動打開指定的端口(以23000 為例):
#/sbin/iptables -I INPUT -p tcp --dport 23000 -j ACCEPT
3.打開端口后,記得保存:
#/etc/rc.d/init.d/iptables save
