我已經在Android藍牙客戶端必須由RFCOMM連接到我的電腦,並使用UUID 00001101-0000-1000-8000-00805F9B34FB藍牙RFCOMM在電腦上工作,但不得不使用另一個
虛擬COM端口使用PyBluez庫以及Python 2.6。我用下面的代碼從PyBluez Documentation
from bluetooth import *
server_sock=BluetoothSocket(RFCOMM)
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port = server_sock.getsockname()[1]
uuid = "00001101-0000-1000-8000-00805F9B34FB"
advertise_service(server_sock, "SampleServer",
service_id = uuid,
service_classes = [ uuid, SERIAL_PORT_CLASS ],
profiles = [ SERIAL_PORT_PROFILE ],
)
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"
這工作完全正常的Windows 7
下,但我有在Windows XP上的另一臺計算機沒有任何反應,也就是我的代碼停留在行「正在等待連接在RFCOMM頻道上「。不過,我的藍牙客戶端警告我它已連接。
此Windows XP計算機藍牙配置允許我爲藍牙串行通信設置COM端口。如果我在此配置的COM端口上偵聽,則可以從藍牙客戶端看到我的數據。
我更喜歡在任何Windows計算機上運行代碼,並且我不想在這些計算機上配置虛擬COM端口。所以我想上面的程序也與Windows XP電腦一起工作。
我怎麼錯過?就好像Windows XP計算機不會將藍牙數據轉發到我的程序,即使我禁用其在虛擬串行端口上再現數據的功能。 看來我使用的UUID是一個衆所周知的,但我必須使用這一個讓我的程序與另一個特定的平臺兼容。
Windows 7計算機上的藍牙堆棧來自Atheros Communications,Windows XP計算機上的藍牙堆棧來自Widcomm。
聽起來像你的Windows驅動程序正在接管連接,並將其用於虛擬COM端口。您是否嘗試禁用(或卸載)Windows設備管理器中的虛擬COM端口/藍牙串行端口設備? – TJD 2012-03-27 18:59:20
我有同樣的感覺。是的,我卸載了它,我甚至在我的藍牙管理器中刪除了虛擬端口服務功能,並重新啓動以防萬一:我仍然可以連接我的藍牙客戶端,但沒有任何反應。知道一些有趣的事情:如果啓用了虛擬端口並且啓動了我的程序,則藍牙客戶端無法連接(就好像驅動程序和我的程序有衝突一樣)。 – 2012-03-27 19:35:02