微课讲稿_Androidsocket网络编程.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android Socket网络编程
Android Socket网络编程与标准Java Socket网络编程不同之处 体现在以下三点: 1. Socket在Android上的编程应用中,都是作为客户端来使 用 2. 访问网络不能在主程序中进行,而子线程不能访问主线程中 的组件,这就涉及到了Handler的消息传递机制 3. 在编写访问网络的应用程序时,要设定相应的网络访问权限
学习指导
由于Android客户端要求所有的网络操作都不能在主线程 中进行,所以要把数据的收发都放在子线程中。与服务器 一样,因为是聊天程序,不能出现数据发送和接收相互干 扰的情况,所以必须创建两个子线程,并发实现数据的发 送和接收。
学习指导
Android客户端的布局文件如下:
学习指导
•Android客户端的布局文件如上图所示。 在Android客户端界面上设置了一个文本框,一个编辑框和 一个按钮。文本框用于显示从服务器收到的数据,编辑框 用于输入将要发送给服务器的数据,按钮用于启动数据发 送。
启动手机客户端:
学习指导
学习指导
学习指导
学习指导
总结
• Android Socket应用程序中把数据发送和数据接收功能放 在两个不同的子线程中,这样可以做到发送与接收并发处理, 互不干扰。在数据接收子线程中通常要把接收到的数据封装 在消息中,通过Handler的sendMessage方法发送给主线程, 在主线程中要重载Handler的handleMessage方法,从接收 消息到的消息中取出子线程发来的数据,用来更新主线程中 的UI组件。
回)接收数据 3)发送数据
按照Android平台的要求,这三件事不能放在UI线程中来做,必 须单独启动线程来完成网络相关操作。 联网线程从服务器获取数据后,必须通过Android平台的 Hnadler消息传递机制把读取到的数据发送给UI线程,由UI线程 来更新相关界面组件的内容
学习指导
学习指导
•这是服务器的主线程。 在主线程中建立ServerSocket对象,监听服务器端口, 如果有连接请求到来,就生成Socket对象,从Socket对 象中获取数据的输入和输出通道,然后启动子线程随时 接收来自客户端的数据。在启动子线程时,将数据输入 通道对象dis作为参数传给了子线程,这样子线程才能 从网络接收数据。主线程最后进入一个永久循环,在这 个循环中接收服务器键盘输入的数据,通过输出通道发 送给客户端。
学习指导
学习指导
•主线程的这部分代码完成以下工作: 1. 启动子线程用于接收服务器来的网络数据 2. 创建Hnadler对象mHandler,并重载handleMessage(msg) 方法,在该方法中,将接收到的msg中封装的数据取出,填写 到文本框中去,完成了主线程UI界面的更新。
学习指导
Android Socket 网络编程
北京信息职业技术学院 | 林志红
Android Socket网络编程
•Android系统目前已经充斥了我们生活的各个方面, 除手机、平板电脑、电视盒子、游戏机、手表和车 载系统以外还有其他很多设备可能运行着 Android 系统。Android系统主要应用于嵌入式产品,而当今 的嵌入式产品往往对于网络有较强的依赖性,一些 复杂的功能往往需要服务器的支持,因此学好 Android网络编程对于从事嵌入式产品开发非常有益 处。
作业与思考
•请画出以上通信过程中服务器及客户端各个线程之间的协作 关系图。
学习指导
AndroidManifest配置文件:
学习指导
客户端代码:
学习指导
•下面来看客户端代码:
先看主线程。这是主线程的部分代码,在这段代码中完成 了两项工作: 1. 在界面上放置三个控件,包括文本框,编辑框和按钮 2. 设置按钮事件监听器,在按钮事件处理代码中创建并启 动数据发送子线程。单击发送按钮时,按钮事件处理程序 将编辑框中的字符串取出,作为数据发送子线程的参数, 创建并启动该子线程,将字符串发送到服务器。
学习指导
例:手机客户端连上服务器后,能够和服务器端聊天。两 端都可以发送文本,文本能够在另一端收取之后显示。
学习指导
先考虑服务器端程序。由于这是一个服务器与手机的 聊天程序,不能出现发送的时候不能接收,接收的时候 不能发送的现象,所以要求服务器能够并发处理数据的 发送和接收,也就是发送数据和接收数据应该放在不同 的线程中。
再看子线程:
学习指导
•再看子线程:
这是接收数据的子线程。由于先启动这个子线程,所以把发 送连接请求,获取数据通道的操作也放在了这个线程中。接 收数据部分是一个永久循环,在循环中接收服务器发来的数 据,然后建立一个消息对象,将接收到的网络数据封装在消 息对象中,最后通过Handler的sendMessage方法把消息发送 给主线程。完成消息发送之后又继续接收服务器数据。
告知目标
产生这些不同点的原因在于Android平台上网络程序与SE平台 上网络程序的应用场景不同。今天我们就针对Android平台来学 习Socket网络编程技术。
回忆旧知
Java Socket网络通信的基本过程 在客户机/服务器模式中, 服务器处于被动的一方,始终 在监听服务端口。如果要发起一次通信,客户端需要主 动创建与服务器连接的Socket套接字, 向服务器发出连 接请求,服务器端收到了客户端的请求, 也会创建与客户 连接的 Socket. Socket可看作是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据。
学习指导
学习指导
•下面看一下接收数据的子线程:
这是接收来自客户端数据的子线程,在线程类构造方法中 获得了主线程传来的数据输入通道对象dis,在线程体中就 是通过这个对象接收客户端发来的数据。 可以看到,线程体run()方法中一旦收到字符串就立刻打印 出来。
通过以上代码我们可知,发送数据和接收数据被放在不同 的线程中,相互之间没有干扰,并发执行。
学习指导
数据发送子线程:
学习指导
•数据发送子线程:
数据发送子线程的功能很简单,就是把主线程传过来的字符 串参数通过数据输出通道对象dos发送给服务器,然后子线程 结束。这个子线程每次启动是在单击发送按钮的时候,也就 是说是在按钮事件处理方法中启动的。
学习指导
运行结果: 先启动服务器:
学习指导
相关文档
最新文档