Socket_TcpClient学习开发中不经意的小问题。
2015-07-17 15:04
211 查看
基于Socket编程是网络编程的基础。一个完整的网络通信需要一个五元组来标识:协议、本地地址、本地端口号、远端地址、远端端口号。Socket编程有TCP和UDP两种,TCP是基于连接的,而UDP是无连接的。本次项目需要的是TCP客户端APP,故主要说明TCP。TCP是基于Client/Server通信模式的,在客户/服务器模式中我们将请求服务的一方称为客户(client),将提供某种服务的一方称为服务器(server)。
客户机/服务器的请求/响应过程示意图如下所示。
![](http://img.blog.csdn.net/20150717150836974?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图1 客户/服务器通信模型
在了解了Socket编程基础之后,就需要真刀真枪的干了。TCPclient的开发demo有很多。在搜寻了之后,Android应用开发提高篇(4)-----Socket编程(多线程、双向通信),这片博文比较适合初学者,比较容易让人理解Socket编程的过程。
下面遇到的问题都是基于上篇博文的代码。
问题一:按照博文代码,新建android工程之后,生成APK文件,安装之后。发现一点击“连接”,APP就显示“很抱歉,**已停止运行”。
解决过程:这个问题纠结了我很久。代码是源代码,不可能有问题。那就是我的工程有问题。我参照自己的工程和网上成熟的TCPclient_demo进行了对比。在AndroidMainfest.XML发现缺少了:
<uses-permissionandroid:name="android.permission.INTERNET"/>联网许可,需添加。
还有
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17"
/> 自动生成工程中设置了目标SDK版本,需将android:targetSdkVersion="17"删除。
原因:targetSdkVersion如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。但是,这个设置仅仅是一个声明、一个通知,不会有太实质的作用,比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低版本中是不支持的,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError。也就是说,此属性不会帮你解决兼容性的测试问题。你至少需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性是没有问题的。所以最好不要加。本人将之删除或者将“17”改为“8”与minSdkVersion对应都可解决问题。
问题二:进入界面之后自动跳出软键盘。
解决方法:在AndroidMainfest.XML相对应的activity中加入:
android:windowSoftInputMode="stateHidden|adjustPan"
如: <activity
android:name="com.test.BTClient.BTClient1"
android:windowSoftInputMode="stateHidden|adjustPan"/>需加入
客户机/服务器的请求/响应过程示意图如下所示。
图1 客户/服务器通信模型
在了解了Socket编程基础之后,就需要真刀真枪的干了。TCPclient的开发demo有很多。在搜寻了之后,Android应用开发提高篇(4)-----Socket编程(多线程、双向通信),这片博文比较适合初学者,比较容易让人理解Socket编程的过程。
下面遇到的问题都是基于上篇博文的代码。
问题一:按照博文代码,新建android工程之后,生成APK文件,安装之后。发现一点击“连接”,APP就显示“很抱歉,**已停止运行”。
解决过程:这个问题纠结了我很久。代码是源代码,不可能有问题。那就是我的工程有问题。我参照自己的工程和网上成熟的TCPclient_demo进行了对比。在AndroidMainfest.XML发现缺少了:
<uses-permissionandroid:name="android.permission.INTERNET"/>联网许可,需添加。
还有
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17"
/> 自动生成工程中设置了目标SDK版本,需将android:targetSdkVersion="17"删除。
原因:targetSdkVersion如果设置了此属性,那么在程序执行时,如果目标设备的API版本正好等于此数值,他会告诉Android平台:此程序在此版本已经经过充分测,没有问题。不必为此程序开启兼容性检查判断的工作了。也就是说,如果targetSdkVersion与目标设备的API版本相同时,运行效率可能会高一些。但是,这个设置仅仅是一个声明、一个通知,不会有太实质的作用,比如说,使用了targetSdkVersion这个SDK版本中的一个特性,但是这个特性在低版本中是不支持的,那么在低版本的API设备上运行程序时,可能会报错:java.lang.VerifyError。也就是说,此属性不会帮你解决兼容性的测试问题。你至少需要在minSdkVersion这个版本上将程序完整的跑一遍来确定兼容性是没有问题的。所以最好不要加。本人将之删除或者将“17”改为“8”与minSdkVersion对应都可解决问题。
问题二:进入界面之后自动跳出软键盘。
解决方法:在AndroidMainfest.XML相对应的activity中加入:
android:windowSoftInputMode="stateHidden|adjustPan"
如: <activity
android:name="com.test.BTClient.BTClient1"
android:windowSoftInputMode="stateHidden|adjustPan"/>需加入
相关文章推荐
- http和socket之长连接和短连接区别
- ThinkPad X240 Ubuntu 14.10 LTS 系统找不到wifi网络的解决方案 / 手动安装无线网卡驱动
- HTTP长连接与短连接
- 浏览网络图片
- HTTPS和SSL/TLS协议
- HTTP的长连接和短连接
- tcpdump抓包实战
- 云计算和大数据时代网络技术揭秘(八)数据中心存储FCoE
- 安卓网络图片查看(WebView)
- 查看网络图片
- 安卓开发笔记——关于图片的三级缓存策略(内存LruCache+磁盘DiskLruCache+网络Volley)
- 微软开业网站----精华 http://www.microsoft.com/opensource/directory.aspx
- 利用tar 通过网络拷贝数据
- Android与IIS身份验证——基本验证_HttpClient Http请求 验证
- tcp/ip的三次握手和四次挥手图解
- 【socket】TCP 和 UDP 在socket编程中的区别
- 转载 httpclient 上传、下载文件
- HttpClient实现文件的上传下载
- HTTP错误汇总(404、302、200……)
- HTTPClient模块的HttpGet和HttpPost