b_m*_*b_m 7 python sockets pys60
我想在PyS60中为我的诺基亚手机写一个小型蓝牙服务器应用程序.它需要能够发送对客户端请求的响应,并能够将数据推送到客户端.
选项1:如果我使用socket.recv(1024),程序会等到收到某些内容,因此服务器无法将数据推送到客户端.用于S60实现的Python缺少该socket.settimeout()方法,因此我无法编写正确的非阻塞代码.
oprion 2:socket.makefile()方法看起来不错,但无法使其发挥作用.当我更换为conn.recv(1024)to时fd = socket.makefile() fd.readline(),它没有读到任何东西.
选项3:查看select()函数,但没有运气.当我改变了conn.recv()对r,w,e = select.select([conn],[],[])像它已经建议客户甚至不连接.它挂在"等待客户......".奇怪...
我知道有很好的服务器实现和异步API-s,但我只需要一个非常基本的东西.提前致谢!
这就是我所拥有的:
sock = btsocket.socket(btsocket.AF_BT, btsocket.SOCK_STREAM)
channel = btsocket.bt_rfcomm_get_available_server_channel(sock)
sock.bind(("", channel))
sock.listen(1)
btsocket.bt_advertise_service(u"name", sock, True, btsocket.RFCOMM)
print "Waiting for the client..."
conn, client_mac = sock.accept()
print "connected: " + client_mac
while True:
try:
data = conn.recv(1024)
if len(data) != 0:
print "received [%s]" % data
if data.startswith("something"): conn.send("something\r\n")
else:
conn.send("some other data \r\n")
except:
pass
Run Code Online (Sandbox Code Playgroud)
它显然是阻塞的,所以"其他一些数据"永远不会被发送,但它是迄今为止我所获得的最好的数据.至少我可以发送回复给客户的东西.