蓝牙休闲娱乐平台(毕业设计)第四部份

 然后就到chat包中的类了。大家从类的命名中,也差不多知道了每项个类的功能。这个包中的类都是采用多线程的技术,B/S模式的编程思想。与网络平台的B/S模式一样的,前提是你得会用JSR82的API,明白BLUETOOTH的服务模式,与服务search 模式,设备发现模式这类的知识先。我在这个讲上这方面的知识吧,根据我所学的程度来说的,可能有点出入吧。Bluetooth的匹克网这方面我就不讲了的,就从bluetooth的服务器方讲起了。每台有bluetooth功能的手机(蓝牙设备)都可以是服务器或客户端,或者同时于两种身份同时存在。每个蓝牙设备都有一个一个SDDB-服务记录数据库,里边存放着服务记录表,一张表是一些服务记录属性的集合,而服务记录的的属性是一对值来着,由服务记录ID与服务记录值(DataElement类类型)组成。服务记录表的服务记录属性值可分为两种,一种是默认的服务记录属性,一种是用户自定义的服务记录属性能。。每张服务记录表对应着蓝牙设备所提供的服务,每张有一个ID(UUID)。什么时候服务记录数据库中会有服务记录表呢,当然是蓝牙设备提供一个服务时了。如下这段代码:
             /*开启服务*/
            server = (StreamConnectionNotifier)Connector.open(
                "btspp://localhost:22222222222222222222222222222222");
当蓝牙设备执行这段代码时,它会同时在自己的服务记录数据库中增加一个服务记录表,表中的ID(UUID=22…….),表中的那些默认的服务记录属性就是自动填写了,如果想增加一些用户自定义的服务记录属性,可以参于如下代码:
          /*服务器服务记录*/
         ServiceRecord record = local.getRecord(server);
         /*自定义服务记录属性*/
            DataElement elm = null;
            elm  = new DataElement(DataElement.STRING, userName);
            //请注意这上面的 userName 这里不能为中文的,所以上面我才说登录的时
            候不能有中文的原因了,这可以是中文编码的问题,我也不清楚//
            record.setAttributeValue(0x1234, elm);
            elm = null;
            elm = new DataElement(DataElement.STRING, "SCHOLAR_II");
            record.setAttributeValue(0x1235, elm);
            /*更新服务记录属性*/
            local.updateRecord(record);
 讲到这里蓝牙设备服务端就OK了~
接着讲蓝牙设备的客户服端了,就客户端而言当然而是想得到服务了。JSR82API所提供的机制很符合面向对角,也类似与人的思维方式。我想要某种服务,我向周围的人咨询是否有提供我所想要的服务,如果有就与对方交互,接着就享受服务了。当然你要向周围的咨询时,你得知道身边有那些人吧。蓝牙设备想要得到某种服务,首先所做的工作就是收搜附近的设备,接着就问所收搜的设备提供那些服务(查找对方的服务记录数据库吗),是否提供自己想要的服务(通过UUID来判断)。前面讲到的蓝牙设备服务器设置的用户自义服务属性后,客户服如何获得那些属性呢,如下参考代码:
      /*获得服务器端的服务记录*/
      tempRecord = (ServiceRecord)serviceFound.elementAt(i);
      /*获得服务器端的服务记录的链接字符串并加入到聊天室的链接列表*/
      chatRoomList.roomURLList[i]= tempRecord.getConnectionURL(
        ServiceRecord.NOAUTHENTICATE_NOENCRYPT, false);
      /*获得服务记录的用户自定义的服务属性并加入到聊天室名的列表*/
     String str =(String)(tempRecord.getAttributeValue(0x1234).getValue());
      chatRoomList.append(str, null);
      chatRoomList.roomNameList[i] = str;
客户端与服务器接链其实大家可以想想一下,在有线网络的TCP/UDP链接。如果想链接某服务品,知道IP与PORT就OK(当然服务器是运行着的了),对应于蓝牙无线通讯来说呢?就得需要一个链接字符串,蓝牙设备客户端的设备发现与服务记录的查代的最终结果与目的就是用得到这个与服务器放的链接字符串。得到链接字符串之后,与服务器的链接只是一句代码而于。
/*链接服务器*/
         client = (StreamConnection)Connector.open(connectURL);
服务器端与客户端的链接后,就如种有线网络的TCP/UDP通讯方式一样了,得到数据输入输出流,接着爱传什么数据就传什么数据了。
总之一种话,蓝牙设备提供的服务是发在服务记录数据库中的,为了方便蓝牙设备客户端的咨询,使蓝牙设备客户端能得到与其接着的链接字符串。链着后的事就easy多了。
      对于其它包中的server类与client类都不用要介绍,多代码就OK了。对于系统中的多人聊天的功能,还是有很大的BUG的,虽然我采用的时服务器多线程的服务模式(这在WEB网络是没问题的),但在手机平台可以就行不通了。
     还在再补充一点的是有关我所写的游戏。其实是我们小时候玩过的一个类似与五子棋的变种吧,棋盘是竖着放的,棋子从上放,往下落到空的棋格中。四个方向到达五个棋就算赢,我的游戏中是四个棋子(水果)。游戏采用的是动画帧的原理,加上多线程的技术通讯。其实对于这个游戏来说不用动画帧这个技术也可以的,只是为了游戏画面的动感而于。(使用精灵类)。其实我所写的这个游戏算是回合制的游戏,如果是实现对战或实现合作类型的游戏,如果用蓝牙设备的通讯技术来实现,很多问题还是得多多思考的。对于利用蓝牙通讯技术来开放游戏或娱乐软件,我觉得还是不错的一种尝试。
如何实现多个一起玩游戏通过蓝牙通讯技术-这个问题待去解决。以我现有的经验,所要解决的问题是实际上是如何在没有中心服务器(不是一般蓝牙设备,所指的是负责存贮数据与处理大理的事务的服务器,不可能用一台蓝牙设备来实现这样功能吧,呵呵)的情况下,如何实现多个设备的通信。
呵呵,讲到这时就OK了吧。希望大家能够理解我述的东东吧(本人表达能力不是很强,在努力提高中ing)。
有疑问的或有些地方不明白朋友可以给我Email或留言呀,如果我能帮了忙的话.嗯,如果那个朋友发现我的错误,我让帮忙指证一下,相互交流学习,共同进步哈.
最后,希望哪位HR看到我所写的BLOG与代码后,觉得我现在的能力能够胜任一些基础的工作时,请给我一个实习或工作的机会好吗?谢谢.期待HR-您的联系.可以Email给我或qq当面谈.
我的联系方式
 Email:scholar_ii@163.com
 QQ-642560001      
系统其它类的代码如下:   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值