我試圖在我的電腦和我的諾基亞E63之間建立一個RFCOMM客戶端 - 服務器通信系統。我在PyBluez中使用Python來設置服務器,並使用PyS60在我的手機上對客戶端進行編程。PyBluez不接受連接
但是PyBluez不接受連接。
這裏的服務器代碼:
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 = [ OBEX_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"
這裏是爲客戶
#!/usr/bin/env python
import socket
class BTReader:
def connect(self):
self.sock=socket.socket(socket.AF_BT, socket.SOCK_STREAM)
addr, services=socket.bt_discover()
print "Discovered: %s, %s" % (addr, services)
port = services[services.keys()[0]]
print port
address=(addr,port)
print "Connecting to", str(address), "..."
self.sock.connect(address)
print "OK."
data = "Hello, World!"
print "Sending data:", data
self.sock.send("Hello World!");
print "SENT."
def close(self):
self.sock.close()
def main():
bt=BTReader()
bt.connect()
bt.close()
if __name__ == '__main__':
main()
的代碼時,我同時運行我得到這個輸出
1)服務器程序(PC): 等待RFCOMM通道1上的連接[並保持在那裏。它不承認連接。我已經使用WINPDB檢查,手機即使表明,它已經建立了一個連接,服務器腳本保留在server_sock.accept()循環]
2)客戶端(電話):
Discoverd: xx:xx:xx:xx:xx:xx {u'SampleServer':1}
1
Connecting to ('xx:xx:xx:xx:xx:xx', 1) ...
OK.
Sending data: Hello World!
Traceback (most recent call last):
...
...
File "c;\resource\socket.py" , line 409, in send return self._sock.send(data, f, cb)
error: (0, 'Error')
是什麼導致問題?
我硬編碼的藍牙適配器的MAC地址在我的代碼。我決定不使用服務發現機制。我沒有試圖解決這個問題,我需要一個快速的解決方法。 – Utsav