Android socket网络编程要注意
来源:互联网 发布:男用避孕药 知乎 编辑:程序博客网 时间:2024/06/06 04:43
最近在玩android,学习到网络这一部分,写了一个电脑本机做服务器,模拟器做客户端的socket通信程序,但手机模拟器客户端就是连不上电脑的服务器端,执行到Socket socket=new Socket("xx.xx.xxx.xxx",8888);就抛异常。我又自己写了一个普通的Java客户端,测试能连上服务器端。所以代码应该没有问题,问题就在于手机模拟器。同学的电脑上装了2.0的android模拟器,我用同学的手机模拟器测试也能连上服务器端。所以可能是模拟器版本的问题。几经周折,无法解决,暂且搁置。
紧接着,我又写了一个通过Http去请求Tomcat 服务器上的资源,执行到DefaultHttpClient().execute(httpPostRequest)就抛异常,但在模拟器的浏览器上通过同样的地址就可以访问到资源,百度之没解决。
感觉很郁闷,网络的两个程序都被搁置了,但感觉它们的错误原因应该是一样。故又单步调试之,发现 socket程序出现android.os.NetworkOnMainThreadException异常,百度之,终于找到前两个程序失败的原因了,我用的是Android 4.0版本,而Android 3.0以上对网络有了更多的限制。
总结如下, Android网络编程要注意以下两点:
一。android里自己电脑的IP地址是10.0.2.2,不能用127.0.0.1或者localhost,即最好使用自己电脑的IP
二。Android 3.0以上不能在android的主线程中执行一个网络操作,否则会出现 android.os.NetworkOnMainThreadException异常,因为主线程的操作
不能超过5秒,否则就报错了,解决方法:
(1)另开一个线程去做网络连接的操作;
(2)在activity类中的onCreate方法中添加strict代码,如下:
Java代码
public void onCreate() {
.......
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectDiskReads()
.detectDiskWrites()
.detectNetwork() // or .detectAll() for all detectable problems
.penaltyLog()
.build());
StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
.detectLeakedSqlLiteObjects()
.penaltyLog()
.penaltyDeath()
.build());
}
- Android socket网络编程要注意
- Android网络编程Socket
- android之socket网络编程
- Android 网络编程 Socket Http
- Android网络编程三:Socket
- Android网络编程 HttpClient Socket
- android的SOCKET网络编程
- Android网络编程之Socket
- Android 网络编程 Socket Http
- android网络编程-socket基础
- Android Socket编程所注意的问题
- Android的socket编程注意点
- android socket 编程 值得注意的地方
- Android网络编程之四:Socket编程
- socket编程注意点
- Android网络编程——Socket
- Android网络编程之Socket&Http
- Android网络编程之Socket通信
- hadoop中每个节点map和reduce个数的设置调优
- 读 C++语言程序设计 -- cpp20130508
- Audio Jack 的耳机检测和按键检测
- SIP中的PRACK
- ActionBar讲解
- Android socket网络编程要注意
- JAVA获取随机数
- flex项目下的html-template 文件夹的作用
- Android组件模型解析
- Android sdk 编译及linux和windows 模拟器启动总结
- 对高性能JAVA代码之内存管理
- Frankenstein——2
- Oracle: wmsys.wm_concat、sys_connect_by_path、自定义函数实现行列转换
- 【maven】 入门必备基础知识--实用版