解决:使用java连接Fastdfs,上传文件时报:SocketTimeOutException的问题
最近研究了下分布式存储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