开发一个app时,用自己电脑搭建了一个服务器,用自己开发的app访问服务器时一直出现错误java.net.SocketTimeoutException: failed to connect to /172.16.29.238 (port 8080) from /10.38.84.198;
错误意思是指主机172.16.29.23连接主机10.38.84.198超时,自己查了很多资料,整了很久最后终于找到了错误的原因,特此记录一下。
解决方案
让电脑和手机处于同一个局域网即可,可以用自己电脑开一个Wifi,手机关掉流量,连上电脑开的Wifi。
原因
出现这个错误的原因涉及到一些计算机网络方面的知识,首先我电脑搭建服务器用的是分配给我电脑的一个局域网地址,即一个内网地址,而我手机访问时,开的是流量,分配给我手机的也是另一个网络分配给我手机的局域网地址,我的手机没有与电脑处于同一个局域网;两个不同网络的内网地址肯定不能直接互相访问。简单点说就是,你搭建服务器的地址是公网ip,别人才能访问得到;如果硬要用内网地址搭建一个外界能访问的服务器也可以,你要下载一些软件,在路由器配置一下信息才行。因为,内网的地址要访问外网,实际要进行一个地址转换才可以,把地址转换为一公网ip才可以与别的网络交换信息,而地址转换则发生在一个主机的默认路由那里;