分享

简易蓝牙聊天工具①:聊天服务器

 老巫婆图书馆 2021-07-06

最近有很多人关心用app inventor2(以下简称AI2)进行蓝牙通信的问题,这里制作了一个简易的聊天工具,来说明如何使用AI2所提供的蓝牙组件,来实现信息的发送与接收。

在日常生活中,我们经常提及“蓝牙”这个词,得知它是一种通信手段,但并不了解通信背后的机制。在AI2中有两个蓝牙组件:蓝牙客户端、蓝牙服务器,为什么需要两种类型的蓝牙组件?难道两部通信中的蓝牙设备,具有不一样的角色?答案是肯定的。那么服务器与客户端究竟有哪些区别呢?

蓝牙通信过程分为三个步骤:

  1. 设备配对

  2. 建立连接

  3. 消息收发

两部手机之间要想实现蓝牙通信,必须首先进行配对,配对成功之后才有可能建立连接。

建立连接也称“握手”,就像打电话一样,一方拨号,另一方必须摘机或按下接听按键,才能实现通话。此时,拨号的一方是通信的发起者(请求者-requester),接听的一方是通信的应答者(响应者responser),对应于蓝牙通信,前者(发起者)就是客户端,后者(应答者)就是服务器。

一旦建立了连接,接下来就可以开始收发消息了,此时,客户端与服务器之间的关系是对等的,任何一方都可以发送消息,同时也可以接收消息。

从AI2中的两个蓝牙组件的代码块中,我们可以得知,两个组件都可以发送及接收数字、文本以及字节码,在这个建议聊天工具的例子中,只涉及到文本的收发。

为了便于识别两个蓝牙组件的差异,我们将制作两个应用,分别实现服务器及客户端的功能。首先实现服务器功能。

1、功能描述

  • 应用启动时勾选“等待连接”复选框,开启蓝牙服务,等待客户端连接,禁用断开连接按钮;

  • 当收到请求完成连接时,启用断开连接按钮,启用计时器;

  • 在计时事件中侦听服务器收到的字节数,如果字节数大于0,则更新聊天记录;

  • 当收到“断开连接”消息时,取消勾选“等待连接”复选框,显示“已断开连接”,禁用断开连接按钮,禁用计时器;

  • 再次勾选“等待连接”复选框时,开启蓝牙服务,等待客户端连接;

  • 点击断开连接按钮,服务器向客户端发送“断开连接”消息,与客户端断开连接,禁用计时器,禁用“断开连接”按钮。

2、界面设计


3、组件的命名及设置

4、屏幕初始化

在设计视图中已经勾选了接受连接复选框,因此这里直接调用蓝牙服务器组件的“接受连接请求”过程,开启蓝牙服务。

5、接受连接请求

当蓝牙服务器收到连接请求时,将自动完成连接,自定义过程“连接成功”用于设置用户界面组件的状态,并启用计时器。

6、在计时事件中侦听消息

每隔1秒钟,服务器执行一次侦听操作——获取接收字节数,如果蓝牙客户端在此前向服务器发送了消息(数字、文本或字节码),那么服务器的接受字节数将大于零。

在聊天客户端应用中,可能有三种操作:请求连接、发送消息或断开连接,后面两种操作都会向服务器发送文本消息:当执行断开连接操作时,会首先向服务器发送“断开连接”四个字,然后再与服务器断开连接。因此在上图中,当接收到不同内容的消息时,会执行不同的操作——断开连接,或者更新聊天记录。

断开连接过程首先让蓝牙服务器停止接受连接,然后设置用户界面组件的状态,并禁用计时器。

更新聊天记录过程会根据“发送”参数(逻辑值)判断消息来源,如果是聊天服务器发送的消息,“发送”=真,则在聊天内容前添加字符“服务器:”,否则添加字符“客户端:”。

7、重新开启蓝牙服务

无论是客户端还是服务器发起的断开连接操作,都会导致取消勾选“接受连接选框”,此时可以重新勾选该复选框,让蓝牙服务器恢复服务状态。当服务器与客户端处于连接状态时,也可以取消勾选该复选框,从而主动断开连接。

8、主动断开连接

当点击断开连接按钮时,服务器首先向客户端发送消息——“断开连接”,然后断开与客户端之间的连接,并调用自定义过程“断开连接”。这一功能与复选框的取消勾选有相似之处,都会中断连接,但手段不同,前者(按钮断开)是断开连接,而后者(复选框)是终止服务。

9、发送消息

当用户在聊天内容输入框中输入了文字,并点击提交按钮时,蓝牙服务器将向客户端发送消息,并更新聊天记录。

10、处理连接失败事件

以上是聊天服务器应用的实现过程,下一篇文章将讲述聊天客户端应用的实现过程,敬请期待。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多