2013-04-05 11 views
11

Python 3.3には、Bluetoothソケットのネイティブサポートが付属していました。残念ながら、それはあまりにもよく文書化されていません(documentationに1つの言及しかありません)。Python 3.3を搭載したBluetoothサーバー

クライアントの実装についてはa blog postですが、サーバーの作成については何も見つかりませんでした。

具体的には、ユーザーフレンドリーな名前を設定してサービスを宣伝する方法。

ので、

import socket 

serverSocket = socket.socket(socket.AF_BLUETOOTH, 
          socket.SOCK_STREAM, 
          socket.BTPROTO_RFCOMM) 
serverSocket.setTimeout(1) 
serverSocket.bind(("", 1)) 
serverSocket.listen(1) 

something.advertise_service(something something) 
のようなもの

任意のアイデア?

+1

彼らは基本的にpybluezを統合したようです。それらの例を見てみましょう:https://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-server.py – TJD

+1

'advertise_service'はソケットモジュールにも、サーバーソケット、pythonのソースコード内の 'advert'を検索すると、3つの無関係なコメントしか見つかりません。 –

+1

私は同じ問題に遭遇しました。私はシンプルなサーバーを作ることができましたが、サービスを宣伝するなどのタスクを実行できませんでした。あなたが興味を持っているなら、ここにクライアント/サーバアプリケーションのコードを見ることができます:http://kevindoran1.blogspot.co.nz/2013/04/bluetooth-programming-with-python-3.html – Kevin

答えて

11

悪いニュース: Pythonは、あなたが何をしたいのかをサポートしていないようです。 (少なくともsocketmodule.cにはない)。

それは2009年

朗報以降に更新されていないが、私が使用pybluezを見てきたのpython/bluetoothのユーザーのほとんどは: 私は(Linuxの接続のために)そのソースを経て、見つかりました広告サービスの関連ビット。コードのほとんどは、本質的にはsocketmodule.cのpython 2.2バージョンからコピー貼り付けられています。

pybluezは、socketオブジェクトがこれらのBluetooth機能をすべて実装するためのいくつかの追加機能を定義していません。あまりにも低レベルにはならず、その代わりにBlueZに依存しています。私が知ることから、基本的にはPythonオブジェクトが必要で、BlueZというデータ構造が作成され、それを呼び出すだけです。 pybluezを使用したくない場合は、この機能が実装されている必要があります。私はあなたがc型でそれをすることができるかもしれないと思う。サービスを宣伝するための関連する部分は、btmodule.c、行2562-2642にある。

pybluezのソースにpython-3ブランチがありますが、動作しているかどうかわかりませんが。

あなたがpybluezを使用することを決定しない場合、their source

server_sock=BluetoothSocket(RFCOMM) 
server_sock.bind(("",PORT_ANY)) 
server_sock.listen(1) 

port = server_sock.getsockname()[1] 

uuid = "94f39d29-7d6d-437d-973b-fba39e49d4ee" 

advertise_service(server_sock, "SampleServer", 
        service_id = uuid, 
        service_classes = [ uuid, SERIAL_PORT_CLASS ], 
        profiles = [ SERIAL_PORT_PROFILE ], 
       ) 

から取られた例Googleのコードが閉じていると、コードもgithubのhereで見つけることができます。

+0

私はpy3を使用する必要があったので、私はスレーブとしてPCを使用して終了すると思います。 –

関連する問題