Socket_TcpClient学习开发中不经意的小问题。

来源:互联网 发布:php session 生成 编辑:程序博客网 时间:2024/05/29 03:13

        基于Socket编程是网络编程的基础。一个完整的网络通信需要一个五元组来标识:协议、本地地址、本地端口号、远端地址、远端端口号。Socket编程有TCP和UDP两种,TCP是基于连接的,而UDP是无连接的。本次项目需要的是TCP客户端APP,故主要说明TCP。TCP是基于Client/Server通信模式的,在客户/服务器模式中我们将请求服务的一方称为客户(client),将提供某种服务的一方称为服务器(server)。

        客户机/服务器的请求/响应过程示意图如下所示。


图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"

        如:   <activityandroid:name="com.test.BTClient.BTClient1"

                                  android:windowSoftInputMode="stateHidden|adjustPan"/>需加入



0 0