移动互联网应用开发-Android网络编程基础实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安邮电大学
通信与信息工程学院
实验报告
(2018/ 2019学年第 2 学期)
课程名称:移动互联网应用开发
实验名称:Android网络编程基础实验
组成员/学号:
专业/班级:通信工程1612
指导教师:金蓉
实验时间:2019年5月14日
一、实验目的和要求
1、掌握基于串口通信的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) new Thread(new Runnable(){
@Override
public void run(){
// TODO Auto-generated method stub
}).start();
2) public class MyThread extends Thread{
//继承Thread类,并改写其run方法
public void run(){
}
启动new MyThread().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()方法获得bundle
Handler发送消息函数
sendMessage(msg)
sendEmptyMessag(int what),发送只包含what值的消息
3.Socket套接字
套接字(Socket) 是通信端点的一种抽象,它提供了一种发送和接收数据的机制,套接字是计机网络中运输层和应用层之间的一种一个中间抽象层,也是一个编程接口,它成对出现,一对套接字Socket的组成就是Socket={(IP地址)1:PORT端口号),(IP 地址2:PORT端口号)},一个套接字接客户端,一个套接字接服务器。
★TCP协议
定义: Transmission Control Protocol,即传输控制协议,是一种传输层通信协议
面向连接:指的是要使用TCP传输数据,必须先建立TCP连接,传输完成后释放连接,就像打电话一样必须先拨号建立-条连接,打完后挂机释放连接。
全双工通信:即一旦建立了 TCP连接,通信双方可以在任何时候都能发送数据。
可靠的:指的是通过TCP连接传送的数据,无差错,不丢失,不重复,并且按序到达。
面向字节流:流,指的是流入到进程或从进程流出的字符序列。简单来说,虽然有时候要传输的数据流太大,TCP报文长度有限制,不能一次传输完,要把它分为好几个数据块,但是由于可靠性保证,接收方可以按顺序接收数据块然后重新组成分块之前的数据流,所以TCP看起来就像直接互相传输字节流一样,面向字节流。
★Socket的使用-客户端
创建一个Socket对象,并指定服务端的IP及端口号
Socket socket=new Socket(“192.168.1.32”,1989);
获取发过的数据
InputStream inputStream=socket.getInputStream();
获取Socket的OutputStream对象并用于发送数据。
OutputStream outputStream=socket.getOutputStream();
这里注意:需添加网络权限
★Socket的使用-服务端
SeverSocket severSocket=new SeverSocket(1989);
调用ServerSocket的accept()方法,接受客户端所发送的请求,
如果客户端没有发送数据,那么该线程就停滞不继续