gpt4 book ai didi

python - PyBluez 不接受连接

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:28 25 4
gpt4 key购买 nike

我正在尝试在我的 PC 和诺基亚 E63 之间设置一个 RFCOMM 客户端-服务器通信系统。我将 Python 与 PyBluez 结合使用来设置服务器,并使用 PyS60 在我的手机上对客户端进行编程。

但是 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 channel 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')

是什么导致了这个问题??

最佳答案

我知道是一年后,但我有另一个解决方案。在某些版本的 Debian(Raspbian 等)和其他一些发行版上。 server_sock.accept() 默认情况下只是挂起并且永远不会接受连接 - 即使来自配对设备!然而,解决这个问题非常简单。如果你去/etc/bluetooth/main.conf 有一行叫做 Disable Plugins。添加一行或进行更改,使其看起来像这样:-

 DisablePlugins = pnat

然后重启蓝牙服务:-

 sudo invoke–rc.d bluetooth restart

现在可能已经修复了。

祝你好运!

引用:RFCOMM without pairing using PyBluez on Debian?

关于python - PyBluez 不接受连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12198198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com