移动互联网应用开发-Android网络编程基础实验

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1西安邮电大学通信与信息工程学院实验报告(2018/2019学年第2学期)课程名称:移动互联网应用开发实验名称:Android网络编程基础实验组成员/学号:专业/班级:通信工程1612指导教师:金蓉实验时间:2019年5月14日一、实验目的和要求21、掌握基于串口通信的Android应用程序的开发方法2、掌握基于多线程的Android应用程序的设计开发方法3、掌握基于socket套接字的Android应用程序的设计开发方法二、实验原理1、串口通信串行端口(SeiailPort)简称串口,也称串行通信接口或串行通讯接口(通常指COM接口),是采用串行通信方式的扩展接口。申行接口是指数据一位一位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。串口通信用于ASCII码字符的传输。通信使用3根线完成,分别是地线(GND)、发送(TX)、接收(RX)。由于串口通信是异步模式,端口能够在一根线上发送数据同时在另一根线上接收数据。串口通信最重要的参数是波特率、数据位、停止价和奇偶校验。对于两个进行通信的端口,这些参数必须匹配。因为串口通信涉及到底层比较难,所以谷歌封装了一个比较简单的方法串口类android-serialport-api,只要四步我们就可以使用该串口:1)打开串口(及配置串口);2)读串口;3)写串口;4)关闭串口。2、多线程多线程,是指从软件或者硬件上实现多个线程并发执行的技术。当用户需要执行一些耗时操作,比如发起一条网络请求时,考虑到网速等其他因素,服务器未必会立刻响应请求,那么就必须将这类操作放在子线程中运行,这就需要实现多线程编程。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用Thread编程的概念就叫作“多线程处理(Multithreading)”。Android多线程编程与Java多线程编程语法相同。线程:Android中的线程是Android程序执行流的最小单元,即安卓CPU分配的最小单元是线程。当应用程序启动时,Android首先会开启一个主线程(也就是UI线程),主线程为管理界面中的UI控件,进行事件分发。Thead.currentThread()是当前线程安卓新建线程的两种方法:1)newThread(newRunnable(){@Override3publicvoidrun(){//TODOAuto-generatedmethodstub}).start();2)publicclassMyThreadextendsThread{//继承Thread类,并改写其run方法publicvoidrun(){}启动newMyThread().start();Handler消息处理:Handler是主要接受子线程发送的数据,并用此数据配合主线程更新UI。当应用程序启动时,Android前先会开启一个主线程(他就是UI线程),主线程为管理界面中的UI控件,进行事件分发,比如说,要是点击个Button,Android会分发事件到Button上,来响应你的操作。如果此时需要一个耗时的操作,例如:联网读取数据,或者读取本地较大的一个文件的时候,就不能把些操作放在主线程中,如果放在主线程中的话,界面会出现假死现象,如果5秒钟还没有完成的话,会收到Android系统的一个错误提示“强制关闭”。这个时候则带要把这些耗时的操作,放在个子线程中,因为子线程涉及到UI更新,子线程中操作是危险的,也就是说,更新UI只能在主线程中更新。这个时候,Handler就出现了。Handler的使用方法:Message消息,是线程间传递的数据,Handler发出Handler,处理者,负责消息的发送(send**)和处理(handleMessage,对消息进行处理,比如更新UI)作用:a:在工作线程发送消息b:在主线程获得消息并处理Message对象arg1,arg2,存放整数数据obj存放Object对象what,指定消息的代码,根据代码执行不同操作setData(Bundle),传递数据量大时使用,可以使用getData()或peekData()方法获得bundleHandler发送消息函数4sendMessage(msg)sendEmptyMessag(intwhat),发送只包含what值的消息3.Socket套接字套接字(Socket)是通信端点的一种抽象,它提供了一种发送和接收数据的机制,套接字是计机网络中运输层和应用层之间的一种一个中间抽象层,也是一个编程接口,它成对出现,一对套接字Socket的组成就是Socket={(IP地址)1:PORT端口号),(IP地址2:PORT端口号)},一个套接字接客户端,一个套接字接服务器。★TCP协议定义:TransmissionControlProtocol,即传输控制协议,是一种传输层通信协议面向连接:指的是要使用TCP传输数据,必须先建立TCP连接,传输完成后释放连接,就像打电话一样必须先拨号建立-条连接,打完后挂机释放连接。全双工通信:即一旦建立了TCP连接,通信双方可以在任何时候都能发送数据。可靠的:指的是通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达。面向字节流:流,指的是流入到进程或从进程流出的字符序列。简单来说,虽然有时候要传输的数据流太大,TCP报文长度有限制,不能一次传输完,要把它分为好几个数据块,但是由于可靠性保证,接收方可以按顺序接收数据块然后重新组成分块之前的数据流,所以TCP看起来就像直接互相传输字节流一样,面向字节流。★Socket的使用-客户端创建一个Socket对象,并指定服务端的IP及端口号Socketsocket=newSocket(“192.168.1.32”,1989);获取发过的数据InputStreaminputStream=socket.getInputStream();获取Socket的OutputStream对象并用于发送数据。OutputStreamoutputStream=socket.getOutputStream();这里注意:需添加网络权限users-permissionandroid:name=”android.permission.INTERNET”/★Socket的使用-服务端SeverSocketseverSocket=newSeverSocket(1989);调用ServerSocket的accept()方法,接受客户端所发送的请求,如果客户端没有发送数据,那么该线程就停滞不继续5Socketsocket=serverSocket.accept();从Socket当中得到InputStream对象InputStreaminputStream=socket.getInputStream();从Socketd当中得到Outputstream对象OutputStreamoutputStream=socket.getOutputStream();三、实验内容(一)串口通信实验实验步骤:1)硬件准备:Step1:把协调器安装在平板的串口UART5上:Step2:利用USB线将串口程序运行在实验箱A9板上调试。2)软件编程:Step1:打开Androidstudio,创建一个项目,项目的名字要求取为“ASChuanKou+各自学号”。Step2:串口所需的相关准备,首先打开SDKManager,打开SDKTools,下载NDK,CMake,LLDB(需联网)。Step3:导入相关材料,吧提供的jni和jniLibs文件复制到main文件下,在Project视图下打开java文件,把android_serialport_api文件夹导入java文件下再打开build.graddle文件把externalNativeBuild{ndkBuild{path'src/main/jni/Android.mk'}}复制到android{}里。Step4:创建全局变量,命名MyApplication。Step5:在Activity里使用串口Step6:在layout页面布局中修改文本框TextView的ID为tvStep7,:创建全局变量,命名Utils。6(二)线程Thread简单实验实验步骤Step1:打开Androidstudio,创建一个项目,项目命名“Handler+各自学号”Step2:创建界面Step3:代码实现(三)群聊天功能——Socket通信服务端实验步骤Step1:打开Androidstudio,创建一个项目,项目命名“SocketServiceApplication+各自学号”Step2:创建界面,首先在drawable创建一个shape属性,这里取名kuang.xmlStep3:创建一个全局的服务端,用于接受各个客户端。Step4:在清单文件里面设置全局变量的name,设置权限。Step5:在Activity里面编写代码(四)群聊天功能——Socket通信客户端实验步骤Step1:打开Androidstudio,创建一个项目,项目命名“ASScoketClient+各自学号”Step2:创建界面,首先在drawable中创建一个shape属性,取名edit_bg.xmlStep3:界面代码编写Step4:Activity代码编写四、实验结果分析(一)串口通信实验7可以读取到温度(二)线程Thread简单实验点击按钮模拟开启线程,从子线程向主线程发送数据(三)群聊天功能——Socket通信服务端可以看到服务器端可以收到客户端的消息并且可以发送消息给客户端8(四)群聊天功能——Socket通信客户端可以看到客户端可以发送消息给服务端并且可以收到服务端的消息五、实验总结1.在面向连接的Socket通信中,服务器如何获知接收到的数据来自哪个地址?可以根据用户名分辨来自哪个客户端。2.Socket有几种类型?编写通信应用时。选择哪一类Socket的原则是什幺?有以下三类:流套接字(SOCK_STREAM):流套接字用于提供面向连接、可靠的数据传输服务。该服务9将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(TheTransmissionControlProtocol)协议。数据报套接字(SOCK_DGRAM):数据报套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP(UserDatagramProtocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。原始套接字(SOCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。根据需求选择其中一类进行使用。10指导教师评分表:实验过程(70%)实验报告(30%)成绩过程表现(20%)目标完成度(50%)原理掌握(10%)撰写规范(10%)分析表达(10%)指导(辅导)教师签名:

1 / 10
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功