2

電話をコンピューターに接続するだけの Android アプリケーションを開発しています。

このコマンドを使用して2台のコンピューターを接続しました(コマンドライン/コンソールから):サーバーこれでリッスンします:

sdptool add --channel=15 SP
rfcomm listen rfcomm4 15

クライアントはこれでサーバーに接続します:

rfcomm connect rfcomm4 11:11:11:11:11:11 15

これは正常に動作しています。(私はbluezでLinuxを使用しています)各マシンの/ devにrfcomm4デバイスを生成し、シリアルポートのように送受信できます。

問題は、Androidフォンからそれをしたいときに起こります。まず、1 台のコンピューターで次のようにサーバーを起動します。

sdptool add --channel=15 SP
rfcomm listen rfcomm4 15

次に、新しいスレッドで Android アプリ (Eclipse と Android SDK で作成) で次のことを行います。

...
UUID MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb");
...
BluetoothSocket tmp = remoteDevice.createInsecureRfcommSocketToServiceRecord(MY_UUID);
...
mBluetoothAdapter.cancelDiscovery();
...
mmSocket.connect();
...

しかし、接続がサーバーに到達することはありません... 完全に理解できない変数がいくつかあります。そのUUID...正確とは何ですか?私は読んで読んだことがあり、チャンネルはその長い文字列に入ると言われています...しかし...どうやって?チャンネル 15 (サーバーでリッスンしているチャンネル) を uuid に入れるにはどうすればよいですか。他の記事では、uuid は事前に確立されたものであると書かれています。rfcomm の場合は、その uuid に移動します...

bluez 2.25を使用して、AndroidフォンとLinux PCの間で簡単な通信(チャットなど)を行うための正しいアプローチを行っているかどうかはわかりません。(サーバー内のこのバージョンは変更できません)。私のアプローチが間違っている場合は、誰かがその方法を教えてくれることを感謝します。

どうもありがとうございました!


@ashish 返信ありがとうございます!!

あなたがコンピューターで言ったように私はhcidumpを行い、hciconfig hci0 upでデバイスをUPすると、これが得られます:

[root@FriendlyARM /]# hcidump -i hci0 -t
HCI sniffer - Bluetooth packet analyzer ver 2.5
device: hci0 snap_len: 1500 filter: 0xffffffff
2000-01-02 05:25:26.472669 < HCI Command: Read Local Supported Features (0x04|0x0003) plen 0
2000-01-02 05:25:26.474602 > HCI Event: Command Complete (0x0e) plen 12
    Read Local Supported Features (0x04|0x0003) ncmd 1
    status 0x00
    Features: 0xff 0xff 0x8d 0xfe 0x9b 0xf9 0x00 0x80
2000-01-02 05:25:26.474711 < HCI Command: Read Local Version Information (0x04|0x0001) plen 0
2000-01-02 05:25:26.476613 > HCI Event: Command Complete (0x0e) plen 12
    Read Local Version Information (0x04|0x0001) ncmd 1
    status 0x00
    HCI Version: 2.0 (0x3) HCI Revision: 0x3000
    LMP Version: 2.0 (0x3) LMP Subversion: 0x420b
    Manufacturer: Broadcom Corporation (15)
2000-01-02 05:25:26.479366 < HCI Command: Read Buffer Size (0x04|0x0005) plen 0
2000-01-02 05:25:26.481614 > HCI Event: Command Complete (0x0e) plen 11
    Read Buffer Size (0x04|0x0005) ncmd 1
    status 0x00
    ACL MTU 1017:8 SCO MTU 64:0
2000-01-02 05:25:26.481753 < HCI Command: Read BD ADDR (0x04|0x0009) plen 0
2000-01-02 05:25:26.483597 > HCI Event: Command Complete (0x0e) plen 10
    Read BD ADDR (0x04|0x0009) ncmd 1
    status 0x00 bdaddr 00:1B:10:00:2A:EC
2000-01-02 05:25:26.483719 < HCI Command: Read Class of Device (0x03|0x0023) plen 0
2000-01-02 05:25:26.485593 > HCI Event: Command Complete (0x0e) plen 7
    Read Class of Device (0x03|0x0023) ncmd 1
    status 0x00 class 0x000000
2000-01-02 05:25:26.485714 < HCI Command: Read Local Name (0x03|0x0014) plen 0
2000-01-02 05:25:26.503570 > HCI Event: Command Complete (0x0e) plen 252
    Read Local Name (0x03|0x0014) ncmd 1
    status 0x00 name 'BCM2045B'
2000-01-02 05:25:26.503671 < HCI Command: Read Voice Setting (0x03|0x0025) plen 0
2000-01-02 05:25:26.505593 > HCI Event: Command Complete (0x0e) plen 6
    Read Voice Setting (0x03|0x0025) ncmd 1
    status 0x00 voice setting 0x0060
2000-01-02 05:25:26.505715 < HCI Command: Set Event Filter (0x03|0x0005) plen 1
    type 0 condition 0
    Clear all filters
2000-01-02 05:25:26.507599 > HCI Event: Command Complete (0x0e) plen 4
    Set Event Filter (0x03|0x0005) ncmd 1
    status 0x00
2000-01-02 05:25:26.507711 < HCI Command: Write Page Timeout (0x03|0x0018) plen 2
    timeout 32768
2000-01-02 05:25:26.509594 > HCI Event: Command Complete (0x0e) plen 4
    Write Page Timeout (0x03|0x0018) ncmd 1
    status 0x00
2000-01-02 05:25:26.509700 < HCI Command: Write Connection Accept Timeout (0x03|0x0016) plen 2
    timeout 32000
2000-01-02 05:25:26.511604 > HCI Event: Command Complete (0x0e) plen 4
    Write Connection Accept Timeout (0x03|0x0016) ncmd 1
    status 0x00
2000-01-02 05:25:26.512423 < HCI Command: Write Scan Enable (0x03|0x001a) plen 1
    enable 3
2000-01-02 05:25:26.514583 > HCI Event: Command Complete (0x0e) plen 4
    Write Scan Enable (0x03|0x001a) ncmd 1
    status 0x00

次に...接続を試みると(最初の投稿で一般的なRFCOMM UUIDを使用して、Androidフォンからコンピューターにコードを入力して)、hcidumpから次のように表示されます。

2000-01-02 05:33:50.147694 > HCI Event: Connect Request (0x04) plen 10
    bdaddr CC:FE:3C:D3:83:7A class 0x5a020c type ACL
2000-01-02 05:33:50.147884 < HCI Command: Accept Connection Request (0x01|0x0009) plen 7
    bdaddr CC:FE:3C:D3:83:7A role 0x01
    Role: Slave
2000-01-02 05:33:50.150700 > HCI Event: Command Status (0x0f) plen 4
    Accept Connection Request (0x01|0x0009) status 0x00 ncmd 1
2000-01-02 05:33:50.305680 > HCI Event: Connect Complete (0x03) plen 11
    status 0x00 handle 11 bdaddr CC:FE:3C:D3:83:7A type ACL encrypt 0x00
2000-01-02 05:33:50.305816 < HCI Command: Read Remote Supported Features (0x01|0x001b) plen 2
    handle 11
2000-01-02 05:33:50.307692 > HCI Event: Command Status (0x0f) plen 4
    Read Remote Supported Features (0x01|0x001b) status 0x00 ncmd 1
2000-01-02 05:33:50.308689 > HCI Event: Read Remote Supported Features (0x0b) plen 11
    status 0x00 handle 11
    Features: 0xbf 0xfe 0xcf 0xfe 0xdb 0xff 0x7b 0x87
2000-01-02 05:33:50.308865 < HCI Command: Remote Name Request (0x01|0x0019) plen 10
    bdaddr CC:FE:3C:D3:83:7A mode 2 clkoffset 0x0000
2000-01-02 05:33:50.311689 > HCI Event: Command Status (0x0f) plen 4
    Remote Name Request (0x01|0x0019) status 0x00 ncmd 1
2000-01-02 05:33:50.331693 > HCI Event: Max Slots Change (0x1b) plen 3
    handle 11 slots 5
2000-01-02 05:33:50.346676 > ACL data: handle 11 flags 0x02 dlen 10
    L2CAP(s): Info req: type 2
2000-01-02 05:33:50.346801 < ACL data: handle 11 flags 0x02 dlen 16
    L2CAP(s): Info rsp: type 2 result 0
      Extended feature mask 0x00b8
        Enhanced Retransmission mode
        Streaming mode
        FCS Option
        Fixed Channels
2000-01-02 05:33:50.352689 > ACL data: handle 11 flags 0x02 dlen 10
    L2CAP(s): Info req: type 3
2000-01-02 05:33:50.352797 < ACL data: handle 11 flags 0x02 dlen 20
    L2CAP(s): Info rsp: type 3 result 0
      Fixed channel list 0x00000002
        L2CAP Signalling Channel
2000-01-02 05:33:50.356688 > ACL data: handle 11 flags 0x02 dlen 12
    L2CAP(s): Connect req: psm 1 scid 0x0045
2000-01-02 05:33:50.356797 < ACL data: handle 11 flags 0x02 dlen 16
    L2CAP(s): Connect rsp: dcid 0x0000 scid 0x0045 result 2 status 0
      Connection refused - PSM not supported
2000-01-02 05:33:50.366652 > HCI Event: Remote Name Req Complete (0x07) plen 255
    status 0x00 bdaddr CC:FE:3C:D3:83:7A name 'BigDaddy'
2000-01-02 05:33:50.596654 > HCI Event: Number of Completed Packets (0x13) plen 5
        handle 11 packets 3
2000-01-02 05:33:54.310068 < HCI Command: Disconnect (0x01|0x0006) plen 3
    handle 11 reason 0x13
    Reason: Remote User Terminated Connection
2000-01-02 05:33:54.312334 > HCI Event: Command Status (0x0f) plen 4
    Disconnect (0x01|0x0006) status 0x00 ncmd 1
2000-01-02 05:33:54.460326 > HCI Event: Disconn Complete (0x05) plen 4
    status 0x00 handle 11 reason 0x16
    Reason: Connection Terminated by Local Host

しかし、コンピューターサーバーはこれを守ります:

[root@FriendlyARM /]# sdptool add --channel=15 SP
[root@FriendlyARM /]# rfcomm listen rfcomm4 15
Waiting for connection on channel 15

それで、電話デバイスはコンピューターに接続しません... (明らかに)しかし... なぜですか?私が間違っていることを知っていますか?

私の目標は、各デバイスにrfcommXポートを取得して、メッセージを変更することです...(チャットのように)

4

0 に答える 0