0

最初のLinuxサービスリスニングプロセスは、次のコマンドを使用して開始されます。

obexpushd –B [00:15:83:3D:0A:57]:9 –d –o / home / myfolder

Windowsでは、次のコードを使用してobex転送を実行します。

InTheHand.Net.BluetoothAddress address = peerDevice.DeviceAddress;
   System.Uri uri = new Uri("obex://" + address.ToString() + "/" + srcfile.Name);
   request = new ObexWebRequest(uri);
   startcopy = DateTime.Now;

   request.ReadFile(file); // this performs the file read from the hard drive

   try
   {
       response = (ObexWebResponse)request.GetResponse(); // here file should be pushed to the listening service
   }
   catch (System.InvalidOperationException ex)
   {
       if (response != null) {
                            response.Close();
       }
       return;
   }

デバイスは相互に認識し、それらのobexサービスも表示されます。転送は成功したようですが、実際にはデータは転送されません。コードはウィンドウとウィンドウの間で問題なく機能します。

Obexpushdプロセスの出力は次のことを示しています。

obexpushd 0.10.2 Copyright (C) 2006-2010 Hendrik Sattler
This software comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions.
Listening on bluetooth/[00:15:83:3D:0A:57]:9
OBEX_EV_ACCEPTHINT, OBEX_CMD_CONNECT
0: Connection from "bluetooth/[00:09:DD:50:94:0B]:9"
0: OBEX_EV_REQHINT, OBEX_CMD_CONNECT
0: OBEX_EV_REQ, OBEX_CMD_CONNECT
0: Sending response code 0
0: OBEX_EV_REQDONE, OBEX_CMD_CONNECT
0: OBEX_EV_REQHINT, OBEX_CMD_PUT
0.1: OBEX_EV_REQCHECK, OBEX_CMD_PUT
0.1: OBEX_EV_REQDONE, OBEX_CMD_PUT
0.1: OBEX_EV_REQHINT, OBEX_CMD_DISCONNECT
0.1: Sending response code 100
0.1: OBEX_EV_REQ, OBEX_CMD_DISCONNECT
0.1: OBEX_EV_REQDONE, OBEX_CMD_DISCONNECT

また、C#コードで認証を無効にしようとしましたが、それは役に立ちませんでした。

この問題を突き止める方法や、どこから探し始めるかを知っている人はいますか?

4

1 に答える 1

1

わかりましたので、誰もこのトピックにあまり興味を持っていないようです。:)幸いなことに、私は自分で解決策を見つけました。

ただし、これには多くの分析 (obex 転送プロトコルと 32feet ライブラリの両方) と少しの運が必要でした。Linux のobexpushd実装との違いは、OBEX 転送パケットの解釈にあります。

ページで OBEX 仕様を見つけました: OBEX 仕様

23feet obex 転送の内部をデバッグした後、受信者にファイルを送信するために使用される OBEX PUT コマンドをコードが送信する場所を見つけました。Obex 仕様では、PUT 初期化パケットの次の例が示されています。

PUT コマンド | パケットの長さ | 名前ヘッダー | 名前ヘッダーの長さ | オブジェクトの名前 | 長さヘッダー | オブジェクトの長さ | オブジェクト本体のチャンク ヘッダー | 本文ヘッダーの長さ | 本体のバイト数

32feet ライブラリは、 obexpushd Linux コマンドでエラーを引き起こす本文ヘッダーなしで最初のパケットを送信します。

32feet ライブラリ、obexpushd のエラーか、OBEX 仕様が正確でないかどうかはわかりませんが、最初のパケットに Body ヘッダーを追加することで問題が解決しました。私の実験から、オブジェクトの少なくとも最初の 2 バイトを最初のパケットで送信する必要があることがわかりました。さらに、ヘッダーを追加しても他はクラッシュせず、Windows<->Windows 転送は引き続き非常にうまく機能します。

于 2012-07-25T12:14:07.890 に答える