#-*- coding:utf-8 -*- import bluetooth import threading #服務器套接字(用來接收新連接) server_socket=None #鏈接套接字服務子線程 def serveSocket(sock,info): #開個死循環等待客戶端發送信息 while True: #接收1024個字節,而後以UTF-8解碼(中文),若是沒有能夠接收的信息則自動阻塞線程(API) receive=sock.recv(1024).decode('utf-8'); #打印剛剛讀到的東西(info=地址) print('['+str(info)+']'+receive); #爲了返回好看點,加個換行 receive=receive+"\n"; #回傳數據給發送者 sock.send(receive.encode('utf-8')); #主線程 #建立一個服務器套接字,用來監聽端口 server_socket=bluetooth.BluetoothSocket(bluetooth.RFCOMM); #容許任何地址的主機鏈接,未知參數:1(端口號,通道號) server_socket.bind(("",1)) #監聽端口/通道 server_socket.listen(1); #開死循環 等待客戶端鏈接 #本處應放在另外的子線程中 while True: #等待有人來鏈接,若是沒人來,就阻塞線程等待(這原本要搞個會話池,以方便給不一樣的設備發送數據) sock,info=server_socket.accept(); #打印有人來了的消息 print(str(info[0])+' Connected!'); #建立一個線程專門服務新來的鏈接(這原本應該搞個線程池來管理線程的) t=threading.Thread(target=serveSocket,args=(sock,info[0])) #設置線程守護,防止程序在線程結束前結束 t.setDaemon(True) #啓動線程 t.start();
bluetoothd -vpython
進入:bluetoothctl服務器