Kirya200
Вот скажите мне пожалуйста,каким образом мне исправить вот этот код?
Ох… придется поучить немного.
Во первых определитесь, что хотите сделать клиента или сервер.
Во вторых один адаптер bluetooth не может работать в двух режимах (клиент и сервер) одновременно.
Этот код будет создает сокет сервера и ждет подключения (у меня были определенные трудности с авторизацией и обнаружением на linux).
from bluetooth import *
server_sock=BluetoothSocket(RFCOMM)
server_sock.bind(("", ANY_PORT))
server_sock.listen(1)
client_sock, address = server_sock.accept() # метод accept() возвращает сокет клиентского подключения и
client_sock.close() # его адрес, все присланные клиентом сообщения будем читать из client_sock
server_sock.close()
server.close()
А этот код будет создавать клиентский сокет и будет пытаться подключиться к устройству с адресом “00:11:22:98:76:54”.
from bluetooth import *
client=BluetoothSocket( RFCOMM )
ADDR = "00:11:22:98:76:54"
client.connect((ADDR,1))
client.send("hello!!")
client.close()
Насчет порта, Вам нужно сначала проанализировать то устройство к которому будете подключаться, на предмет какие сервисы доступны и на каком порту какой сервис висит, не знаю как это в windows сделать, но в linux к примеру я смотрю с помощью sdptool вывод примерно следующий
Service Name: OBEX Object Push
Service RecHandle: 0x10006
Service Class ID List:
"OBEX Object Push" (0x1105)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 4
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Service Name: Network Access Point Service
Service Description: Bluetooth NAP Service
Service RecHandle: 0x10007
Service Class ID List:
"Network Access Point" (0x1116)
Protocol Descriptor List:
"L2CAP" (0x0100)
PSM: 15
"BNEP" (0x000f)
Version: 0x0100
SEQ8: 0 6
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Network Access Point" (0x1116)
Version: 0x0100
Service Name: Phonebook Access PSE
Service RecHandle: 0x10009
Service Class ID List:
"Phonebook Access - PSE" (0x112f)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 8
"OBEX" (0x0008)
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Phonebook Access" (0x1130)
Version: 0x0100
Теперь вернемся к вашему коду, у вас в начале создается сокет сервера и запускает в режим ожидания подключения, дальше Вы создаете сокет клиента (видать чтоб понаваристей код был. Своими комментариями к вашему коду я на это намекал, но вы не поняли), но во первых если так делать нужно два bluetooth адаптера, во вторых клиент и сервер все равно нужно разделять и запускать отдельно или в разных потоках. Надеюсь сейчас Вы поймете насколько я офигел увидев ваш код.
Код примера из документации pyblueZ, в нем идет поиск сервера по UUID - естественно у Вас он другой и поэтому не работает, достаточно немного изменить код и все будет работать.
Вот измененный код
from bluetooth import *
import sys
if sys.version < '3':
input = raw_input
addr = None
if len(sys.argv) < 2:
print("no device specified. Searching all nearby bluetooth devices for")
print("the SampleServer service")
else:
addr = sys.argv[1]
print("Searching for SampleServer on %s" % addr)
# search for the SampleServer service
adr = '00:11:22:98:76:54'
service_matches = find_service(address=adr)
if len(service_matches) == 0:
print("couldn't find the SampleServer service =(")
sys.exit(0)
first_match = service_matches[0]
port = first_match["port"]
name = first_match["name"]
host = first_match["host"]
print("connecting to \"%s\" on %s" % (name, host))
# Create the client socket
sock=BluetoothSocket( RFCOMM )
sock.connect((host, port))
print("connected. type stuff")
while True:
data = input()
if len(data) == 0: break
sock.send(data)
sock.close()
Так что, я думаю Вы взялись за не посильную для Вас задачу (покрайней мере пока), для начала изучите синтаксис python, его особенности и напишите пару простых программ.
Еще не забывайте про режим “видимости” bluetooth устройств!