小さなBluetoothサーバーアプリケーションをPyS60のNokia電話に書き込みたいのですが。クライアントの要求に対する応答を送信でき、クライアントにもデータをプッシュできる必要があります。
オプション1:を使用するsocket.recv(1024)
と、プログラムは何かが受信されるまで待機するため、サーバーはデータをクライアントにプッシュできません。Python for S60の実装にはsocket.settimeout()
メソッドがないため、適切な非ブロッキングコードを記述できませんでした。
oprion 2:socket.makefile()
アプローチは良さそうだったが、うまくいかなかった。conn.recv(1024)
toを交換したところfd = socket.makefile() fd.readline()
、何も読めませんでした。
オプション3:select()
関数を調べましたが、うまくいきませんでした。を「など」に変更するconn.recv()
とr,w,e = select.select([conn],[],[])
、クライアントが接続すらしないことが示唆されました。「クライアントを待っています...」でハングします。変...
非常に優れたサーバー実装と非同期APIもあることは知っていますが、ここで必要なのは本当に基本的なものだけです。前もって感謝します!
これが私が持っているものです:
sock = btsocket.socket(btsocket.AF_BT, btsocket.SOCK_STREAM)
channel = btsocket.bt_rfcomm_get_available_server_channel(sock)
sock.bind(("", channel))
sock.listen(1)
btsocket.bt_advertise_service(u"name", sock, True, btsocket.RFCOMM)
print "Waiting for the client..."
conn, client_mac = sock.accept()
print "connected: " + client_mac
while True:
try:
data = conn.recv(1024)
if len(data) != 0:
print "received [%s]" % data
if data.startswith("something"): conn.send("something\r\n")
else:
conn.send("some other data \r\n")
except:
pass
明らかにブロックしているので、「他のデータ」は送信されませんが、これまでのところ最高です。少なくとも私はクライアントに返信するために何かを送ることができます。