昨天上午从0开始在云服务器上搭建ftp服务,配置jre,到今天在服务器上测试写的socket程序。一路遇到无数的坑,截止现在晚上11点终于成功实现使用socket和外网服务器通信了。
遇到的问题
1、服务器搭好ftp后,在本机上ftp客户端上一直无法连接,后来采用SSH模式下的sftp协议才连上服务器(默认ftp协议,没有使用SSH加密协议)。猜想可能是因为校园网的路由器或网关做了出口限制,所以无法直接使用ftp。(客户端使用的是flashfxp)
2、没搭好ftp之前,使用wget在服务器上下载jdk,解压的时候一直出错,很懵逼,一个简单的下载解压都能出错?卡在这很久都没能解决,百度不到解决方法,用Google搜索wget jdk 第一条说明了问题原因。大致意思是oracle不允许使用从浏览器以外的方法直接使用链接下载,一查之前下载的jdk包,发现只有5kb。。。。。解决方法如下。
3、写了一个最简单的socket通信的程序,服务器端的程序上传运行,在本机上运行客户端程序,发现一直报连接超时的错误。各种测试网络连通性,还是无法找到问题。这种非程序上的问题真的让人很崩溃。我以为是服务器端无法得到客户端地址的原因(本机在内网),导致我一晚上都在查NAT穿透的东西,最后一分析又觉得问题不在于此。tcp三次握手过程中客户端socket通过路由器的时候路由器就会保存源ip和目的ip的映射关系,服务器的响应到达此路由的时候肯定是可以通过这个映射关系找到本机的,所以和NAT无关。最终找到原因是服务器端未关闭防火墙。。。。。。(关闭了客户端防火墙,查看了客户端服务器端的端口开放,追踪了路由,却没有先想到去关服务器端的防火墙????)。
好歹在熄灯之前把问题都解决了。