admin管理员组文章数量:1567138
我是用自己的电脑搭建服务器,首先问题是我们需要在路由器上端口映射,外网才能访问到自己的电脑,如何端口映射可以看看这篇文章:
http://blog.csdn/zhoubin1992/article/details/45917775
一、D-LINK端口转发设置
我的是D-link如图:
名称写你客户端的名称。
IP地址:路由器给本机分配的IP地址,一般以192.168开头。查询方法:cmd下ipconfig
填写私有端口就是路由器需要打开的端口,也可以设置一个区间
公共端口的就是外网要访问的端口。
通信量类型选任意就好了。
二、socket通信程序出错
执行到Socket socket=new Socket("xx.xx.xxx.xxx",8888);就抛异常。报timeout错误。
原因就是客户端连接不上socket。
解决方法:
1、首先确定另开一个线程完成网络连接。
new Thread(){
public void run(){
try{//连接网络并打开流
s = new Socket("110.83.75.12", 8888);
dout = new DataOutputStream(s.getOutputStream());
din = new DataInputStream(s.getInputStream());
}catch(Exception e){//捕获异常
e.printStackTrace();//打印异常
}
2、这样还是不行,最后在 StackOverflow里找到了答案, 还需要 在OnCreate中开启StrictMode
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork()
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
我也不知道为什么要加严苛模式,有人知道的话留言告诉我吧。
这时可以通信了,但是当我用自己的3G流量访问时,又出现了问题。查阅后发现是socket本机IP的问题。
本机还有个外网IP,获得方法:在百度上填写本机IP,出现的就是本机的真实IP。
然后把Socket("xx.xx.xxx.xxx",8888);的IP替换就好了~
版权声明:本文标题:Android开发——本机Tomcat搭建服务器,客户端socket网络连接不上问题以及D-LINK端口转发设置 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1726478748a1072475.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论