纠结ing
学习是一件需要身体力行的事情,有些东西你理念看的多么娴熟,到自己亲自上手,不经意间就出现几个你无法逃避的错误,这时候,教科书上没告诉你这种错误的解决方法,只能自己不断尝试,不断失败,到最后发现其实解决的方法很简单,但你花费了很长时间,这时你是不是觉得很不值。其实那是值得的,这种经历是你看再多书也无法学到的能力。
现在说说我的那个坎吧,最近想做个安卓通信那块的,代码很简单,但pc上开两个java Application是能通信的,但在pc开服务器,安卓手机上装个客户端,却在连接的时候闪退,不知道你有咩有碰到在安卓通信编程这方面的问题呢。当时我就纠结了,不断网上找,什么谷歌百度都拿出来,阅遍千页搜索结果,都是相同的,差不多都是下面那几句:
//服务端
//创建一个ServerSocket,用于监听客户端Socket的连接请求
ServerSocket ss = new ServerSocket(30000);
//采用循环不断接受来自客户端的请求
while (true){
//每当接受到客户端Socket的请求,服务器端也对应产生一个Socket
Socket s = ss.accept();
//下面就可以使用Socket进行通信了
...
}
//客户端
//创建连接到服务器、30000端口的Socket
Socket s = new Socket("192.168.2.214" , 30000);
//下面就可以使用Socket进行通信了
...
然后加些其他东西,不如界面啊,存储啊。。当时我就隐隐怀疑好像是服务器ip的问题,但是网上例子的ip都是直接写的,我就想,难道自己测试的时候的Ip也能固定?当然ip变化,程序员能直接在源码上改的。然后我就没头绪就找资料-》尝试改代码-》运行(安卓运行还特慢)-》运行出错继续找资料。tupo
突破口
最后快被逼疯了的我,已经在假设是不是校内网不可以进行网络编程了,如果是固定ip就没这个问题了。然后我就转了研究方向,从寻找错误点到验证上面那个理论,验证的方法很简单,网上找个已经发布的pc做客户端安卓做应用端的程序,由于是已经发布的,那被证明程序是正确的,如果程序正确我还是不能连接成功的话,那就是校内网的问题了,在此说明下,我的pc和手机都是连接的T_Link路由器也就是wifi,该路由器连到校园网。顺便说下被我找到做小白鼠的是一个一个叫无线鼠标的东西。
解决方案
本来想证明上面那个理论是正确的,最后被我解决了原先的问题,事事多变啊,现在整理下,给和我一样碰到相同问题的人,当然我也做个记录,记录我摔倒的一个坑,用了我整整两天啊!
下面介绍利用安卓进行网络编程的环境配置。
一.连在相同wifi上
解决点
最好有个wifi点可以都连接,如果没有,那只好自己买个了,想学技术,这点必要的钱还是要舍得的。
手机:
pc:
更好的解决点:
经本人测试,只要有个笔记本就行,就算没网都行,只要你不上网,因为手机只需和pc机通信即可。具体方法就是网上下个wif共享精灵之类的程序,让笔记本架设wifi,手机连到笔记本即可,当然不用wifi共享精灵之类的程序直接命令行输入也可,只是麻烦点,反正我是懒得记那些命令行代码。
pc:
手机:
终极解决点:后面我有测试下,发现笔记本连接有线,手机连接wifi,也能通信的。因此现在总结下。
1. pc 连有线 手机连 wifi
2.pc 连wifi 手机连wifi
3. pc开启wifi共享 手机连pc
ps:下面是我的一些设想,一般时候用不到,但可能性很大,看客可自行尝试。
4. 手机开启wifi共享 pc连手机
5.蓝牙连接
二.pc机需要关闭防火墙
解决点:这个必须啦,我建议是,测试的时候打开,平常浏览网页,看看岛国爱情动作大片的时候就把他关上了。
进控制面板-》windows防火墙-》打开关闭windows防火墙,进去都关了好了
三.填写正确ip
解决点:开始菜单栏搜索框输入cmd-》跳转命令行控制界面-》输入ipconfig,按回车,查看ip配置
此时会跳出一大坨东西,由于笔记本有多块网卡,所有里面会有很多ip的,不要管后面,开头一撮就是你的pc ip了,就是下面ipv4地址
后记
那个希望我在我喜欢的事情上能越走越远把。
2013.6.3补充
清单目录里面存在
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
也会出现闪退现象,这里解释下闪退,就是点击进入程序,程序之间强制退出,如果你没碰到,那恭喜你啊,这不是什么好的体验。下面回到正题,研究了原因,发现问题出在android:targetSdkVersion="17"上,将其删除即可。