⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 network-bluetooth.html

📁 FreeBSD操作系统的详细使用手册
💻 HTML
📖 第 1 页 / 共 2 页
字号:
      }</pre><p>PIN码没有限制(除了长度)。 有些设备(例如蓝牙耳机)会有一个预置的PIN码。<varclass="OPTION">-d</var> 开关强制 <span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">hcsecd</span>(8)</span> 守护进程处于前台,因此很容易看清发生了什么。设置远端设备准备接收结对(pairing),然后启动蓝牙连接到远端设备。远端设备应该回应接收了结对并请求PIN码。 输入与<ttclass="FILENAME">hcsecd.conf</tt>中一样的PIN码。 现在你的个人计算机已经与远程设备结对了。另外你也可以在远程设备上初始结点。 以下是简单的 <b class="APPLICATION">hcsecd</b>服务输出样本:</p><pre class="PROGRAMLISTING">hcsecd[16484]: Got Link_Key_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', link key doesn't existhcsecd[16484]: Sending Link_Key_Negative_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4hcsecd[16484]: Got PIN_Code_Request event from 'ubt0hci', remote bdaddr 0:80:37:29:19:a4hcsecd[16484]: Found matching entry, remote bdaddr 0:80:37:29:19:a4, name 'Pav's T39', PIN code existshcsecd[16484]: Sending PIN_Code_Reply to 'ubt0hci' for remote bdaddr 0:80:37:29:19:a4</pre></div><div class="SECT2"><h2 class="SECT2"><a id="AEN36137" name="AEN36137">24.4.7. 服务发现协议(SDP)</a></h2><p>服务发现协议 (SDP)提供给客户端软件一种方法,它能发现由服务器软件提供的服务及属性。服务的属性包括所提供服务的类型或类别,使用该服务所需要的机制或协议。</p><p>SDP包括SDP服务器和SDP客户端之间的通信。服务器维护一张服务记录列表,它介绍服务器上服务的特性。每个服务记录包含关于单个服务的信息。 通过发出SDP请求,客户端会得到服务记录列表的信息。如果客户端(或者客户端上的应用软件)决定使用一个服务,为了使用这个服务它必须与服务提供都建立一个独立的连接。SDP提供了发现服务及其属性的机制,但它并不提供使用这些服务的机制。</p><p>一般地,SDP客户端按照服务的某种期望特征来搜索服务。但是,即使没有任何关于由SDP服务端提供的服务的预设信息,有时也能令人满意地发现它的服务记录里所描述的是哪种服务类型。这种发现所提供服务的过程称为<span class="emphasis"><iclass="EMPHASIS">浏览(browsing)</i></span>。</p><p>蓝牙SDP服务端<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">sdpd</span>(8)</span> 和命令行客户端 <spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">sdpcontrol</span>(8)</span>都包括在了标准的FreeBSD 安装里。 下面的例子展示如何进行SDP浏览查询。</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbdclass="USERINPUT">sdpcontrol -a 00:01:03:fc:6e:ec browse</kbd>Record Handle: 00000000Service Class ID List:        Service Discovery Server (0x1000)Protocol Descriptor List:        L2CAP (0x0100)                Protocol specific parameter #1: u/int/uuid16 1                Protocol specific parameter #2: u/int/uuid16 1Record Handle: 0x00000001Service Class ID List:        Browse Group Descriptor (0x1001)Record Handle: 0x00000002Service Class ID List:        LAN Access Using PPP (0x1102)Protocol Descriptor List:        L2CAP (0x0100)        RFCOMM (0x0003)                Protocol specific parameter #1: u/int8/bool 1Bluetooth Profile Descriptor List:        LAN Access Using PPP (0x1102) ver. 1.0</pre><p>... 等等。 注意每个服务有一个属性(比如RFCOMM通道)列表。根据服务你可能需要为一些属性做个注释。 有些“蓝牙实现(Bluetoothimplementation)”不支持服务浏览,可能会返回一个空列表。 这种情况,可以搜索指定的服务。下面的例子展示如何搜索OBEX Object Push (OPUSH)服务:</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbdclass="USERINPUT">sdpcontrol -a 00:01:03:fc:6e:ec search OPUSH</kbd></pre><p>要在FreeBSD里为蓝牙客户端提供服务,可以使用<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">sdpd</span>(8)</span>服务:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">sdpd</kbd></pre><p>需要为远端提供蓝牙服务的本地的服务程序会使用本地SDP进程注册服务。像这样的程序就有<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">rfcomm_pppd</span>(8)</span>。一旦启动它,就会使用本地SDP进程注册蓝牙LAN服务。</p><p>使用本地SDP进程注册的服务列表,可以通过本地控制通道发出SDP浏览查询获得:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">sdpcontrol -l browse</kbd></pre></div><div class="SECT2"><h2 class="SECT2"><a id="AEN36172" name="AEN36172">24.4.8.拨号网络(DUN)和使用PPP(LAN)层面的网络接入</a></h2><p>拨号网络(DUN)配置通常与modem和手机一起使用。 如下是这一配置所涉及的内容:</p><ul><li><p>计算机使用手机或modem作为无线modem来连接拨号因特网连入服务器,或者使用其它的拨号服务;</p></li><li><p>计算机使用手机或modem接收数据请求。</p></li></ul><p>使用PPP(LAN)层面的网络接入常使用在如下情形:</p><ul><li><p>单个蓝牙设备的局域网连入;</p></li><li><p>多个蓝牙设备的局域网接入;</p></li><li><p>PC到PC (使用基于串行线模拟的PPP网络)。</p></li></ul><p>在 FreeBSD中,两个层面使用<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">ppp</span>(8)</span> 和 <span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">rfcomm_pppd</span>(8)</span>(一种封装器,可以将RFCOMM蓝牙连接转换为PPP可操作的东西)来实现。在使用任何层面之前,一个新的PPP标识必须在<ttclass="FILENAME">/etc/ppp/ppp.conf</tt>中建立。 想要实例请参考<spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">rfcomm_pppd</span>(8)</span>。</p><p>在下面的例子中,<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">rfcomm_pppd</span>(8)</span>用来在NUNRFCOMM通道上打开一个到BD_ADDR为00:80:37:29:19:a4的设备的RFCOMM连接。具体的RFCOMM通道号要通过SDP从远端设备获得。 也可以手动指定通RFCOMM,这种情况下<spanclass="CITEREFENTRY"><spanclass="REFENTRYTITLE">rfcomm_pppd</span>(8)</span>将不能执行SDP查询。 使用<spanclass="CITEREFENTRY"><spanclass="REFENTRYTITLE">sdpcontrol</span>(8)</span>来查找远端设备上的RFCOMM通道。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">rfcomm_pppd -a 00:80:37:29:19:a4 -c -C dun -l rfcomm-dialup</kbd></pre><p>为了提供PPP(LAN)网络接入服务,必须运行<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">sdpd</span>(8)</span>服务。 一个新的LAN客户端条目必须在 <ttclass="FILENAME">/etc/ppp/ppp.conf</tt> 文件中建立。 想要实例请参考<spanclass="CITEREFENTRY"><span class="REFENTRYTITLE">rfcomm_pppd</span>(8)</span>。最后,在有效地通道号上开始RFCOMM PPP服务。 RFCOMM PPP服务会使用本地SDP进程自动注册蓝牙LAN服务。 下面的例子展示如何启动RFCOMM PPP服务。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">rfcomm_pppd -s -C 7 -l rfcomm-server</kbd></pre></div><div class="SECT2"><h2 class="SECT2"><a id="AEN36225" name="AEN36225">24.4.9. OBEX 对象推送 (OBEX ObjectPush - OPUSH) 层面</a></h2><p>OBEX协议被广泛地用于移动设备之间简单的文件传输。它的主要用处是在红外线通信领域,被用于笔记本或手持设备之间的一般文件传输。</p><p>OBEX 服务器和客户端由第三方软件包<b class="APPLICATION">obexapp</b>实现,它可以从 <ahref="http://www.FreeBSD.org/cgi/url.cgi?ports/comms/obexapp/pkg-descr"><ttclass="FILENAME">comms/obexapp</tt></a> port 安装。</p><p>OBEX 客户端用于向OBEX服务器推入或接出对象。 一个对像可以是(举个例子)商业卡片或约会。OBEX 客户能通过SDP从远程设备取得RFCOMM通道号。这可以通过指定服务名代替RFCOMM通道号来完成。 支持的服务名是有: IrMC, FTRN and OPUSH.也可以用数字来指定RFCOMM通道号。下面是一个OBEX会话的例子,一个设备信息对像从手机中被拉出,一个新的对像被推入手机的目录。</p><pre class="SCREEN"><samp class="PROMPT">%</samp> <kbdclass="USERINPUT">obexapp -a 00:80:37:29:19:a4 -C IrMC</kbd>obex&gt; getget: remote file&gt; telecom/devinfo.txtget: local file&gt; devinfo-t39.txtSuccess, response: OK, Success (0x20)obex&gt; putput: local file&gt; new.vcfput: remote file&gt; new.vcfSuccess, response: OK, Success (0x20)obex&gt; diSuccess, response: OK, Success (0x20)</pre><p>为了提供OBEX推入服务,<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">sdpd</span>(8)</span>必须处于运行状态。必须创建一个根目录用于存放所有进入的对象。 根文件夹的默认路径是<ttclass="FILENAME">/var/spool/obex</tt>。 最后,在有效的RFCOMM通道号上开始OBEX服务。OBEX服务会使用SDP进程自动注册OBEX对象推送(OBEX Object Push)服务。下面的例子展示如何启动OBEX服务。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">obexapp -s -C 10</kbd></pre></div><div class="SECT2"><h2 class="SECT2"><a id="AEN36243" name="AEN36243">24.4.10. 串口(SP)层面</a></h2><p>串口(SP)层面允许蓝牙设备完成RS232(或类似)串口线的仿真。这个层面所涉及到情形是,通过虚拟串口使用蓝牙代替线缆来处理以前的程序。</p><p>工具<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">rfcomm_sppd</span>(1)</span>来实现串口层。 “Pseudotty”用来作为虚拟的串口。 下面的例子展示如何连接远程设备的串口服务。注意你不必指定RFCOMM通道——<span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">rfcomm_sppd</span>(1)</span>能够通过SDP从远端设备那里获得。如果你想代替它的话,可以在命令行里指定RFCOMM通道来实现:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">rfcomm_sppd -a 00:07:E0:00:0B:CA -t /dev/ttyp6</kbd> rfcomm_sppd[94692]: Starting on /dev/ttyp6...</pre><p>一旦连接上,“pseudo tty”就可以充当串口了:</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbd class="USERINPUT">cu -l ttyp6</kbd></pre></div><div class="SECT2"><h2 class="SECT2"><a id="AEN36260" name="AEN36260">24.4.11. 问题解答</a></h2><div class="SECT3"><h3 class="SECT3"><a id="AEN36262" name="AEN36262">24.4.11.1. 不能连接远端设备</a></h3><p>一些较老的蓝牙设备并不支持角色转换(role switching)。默认情况下,FreeBSD接受一个新的连接时,它会尝试进行角色转换并成为主控端(master)。不支持角色转换的设备将无法连接。注意角色转换是在新连接建立时运行的,因此如果远程设备不支持角色转换,就不可能向它发出请求。一个 HCI 选项用来在本地端禁用角色转换。</p><pre class="SCREEN"><samp class="PROMPT">#</samp> <kbdclass="USERINPUT">hccontrol -n ubt0hci write_node_role_switch 0</kbd></pre></div><div class="SECT3"><h3 class="SECT3"><a id="AEN36268" name="AEN36268">24.4.11.2.有些东西正发生错误,我能查看发生了什么吗?</a></h3><p>是的,你能。 使用第三方软件包<b class="APPLICATION">hcidump-1.5</b>,这个可以从<ahref="http://www.geocities.com/m_evmenkin/"target="_top">http://www.geocities.com/m_evmenkin/</a>下载到。 工具<bclass="APPLICATION">hcidump</b> 类似于 <span class="CITEREFENTRY"><spanclass="REFENTRYTITLE">tcpdump</span>(1)</span>。它可以用来显示蓝牙数据包的内容并将其存入文件中。</p></div></div></div><div class="NAVFOOTER"><hr align="LEFT" width="100%" /><table summary="Footer navigation table" width="100%" border="0" cellpadding="0"cellspacing="0"><tr><td width="33%" align="left" valign="top"><a href="network-wireless.html"accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html"accesskey="H">起点</a></td><td width="33%" align="right" valign="top"><a href="network-bridging.html"accesskey="N">前进</a></td></tr><tr><td width="33%" align="left" valign="top">无线网络</td><td width="34%" align="center" valign="top"><a href="advanced-networking.html"accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">桥接</td></tr></table></div></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -