2013-07-01 2 views
3

У меня есть эти фрагмент кода в Python с рамках pybluez:Как подключить кэш-сервер Pybluez RFCOMM на Debian?

from bluetooth import * 

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 ], 
        # protocols = [ RFCOMM_UUID ] 
        ) 

print "Waiting for connection on RFCOMM channel %d" % port 

client_sock, client_info = server_sock.accept() 
print "Accepted connection from ", client_info 

try: 
    while True: 
     data = client_sock.recv(1024) 
     if len(data) == 0: break 
     print "received [%s]" % data 
except IOError: 
    pass 

print "disconnected" 

client_sock.close() 
server_sock.close() 
print "all done" 

, а также у меня есть этот другой фрагмент кода в Android, чтобы подключить разъем pybluez RFCOMM сервера:

private static final UUID MY_UUID = UUID.fromString("94f39d29-7d6d-437d-973b-fba39e49d4ee"); 
.... 
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(myServerMacAddress); 
.... 
BluetoothSocket tmp= device.createInsecureRfcommSocketToServiceRecord(MY_UUID); 

Моя проблема заключается в том, что Android устройство может не подключайте к гнезду pybluez. Я думаю, что способ, которым я пользуюсь, неправильно, и я не знаю, как правильно подключиться или рекламировать свой серверный сокет.

ответ

2

Я предложил щедрость, но нашел решение самостоятельно. :) Добавлено на другой ответ, но это может также относиться к вашей проблеме. В некоторых версиях Debian (Raspbian и т. Д.) И, возможно, некоторые другие дистрибутивы. server_sock.accept() по умолчанию будет просто зависать и никогда не принимать соединение - даже с сопряженного устройства! Я в некоторых случаях даже убежден, что сокет не открыт вообще. Однако решение этого очень просто.

Обновление /etc/bluetooth/main.conf файл, добавить строку или изменить существующий, так это выглядит следующим образом:

DisablePlugins = pnat 

Затем перезапустить службу Bluetooth:

sudo invoke –rc.d bluetooth restart 

Теперь это может быть исправлено.

Удачи вам!

Ссылка: RFCOMM without pairing using PyBluez on Debian?

+1

Вы можете добавить ссылку на сообщение, которое Вы получили эту информацию от? Хорошо отдать должное тем, кто этого заслуживает. :) – allprog

+1

Выполнено. Добавлен к нижней части. – user1840255

Смежные вопросы