PDA

View Full Version : pybluez



sgb110
جمعه 10 مهر 1388, 00:32 صبح
سلام
من می خوام با بلوتوث یه فایل رو برا گوشی بفرستم
با کمک pybluez می تونم گوشیم رو پیدا کنم حتی به گوشی وصل بشم
اما نمی تونم فایل بفرستم یا بگیرم


from bluetooth import *
class Device:
def __init__(self,addr,name):
self.Address=addr
self.Name=name
def GetName(self):
return self.Name
def GetAddress(self):
return self.Address

def Search():
L=[]
devices=discover_devices()
for device in devices:
name=lookup_name(device)
obj=Device(device,name)
L.append(obj)
return L
def SendFile(addr):
f=open('1.jpg','rb')
data=f.read()
server=BluetoothSocket(RFCOMM)
server.connect((addr,10))
server.send(data)
server.close()
def Read(addr):
#services = find_service(address=addr)
#devicename =lookup_name(addr,timeout=10)
#for s in services :
# print ("Name:"+s["name"]+'\n')
# print ("Host:"+s["host"]+'\n')
# print ("Port:%s"%s["port"]+'\n')
server=BluetoothSocket(RFCOMM)
try:
server.bind((addr,10))
server.listen(1)
client,port=server.accept()
print('connent to '+ devicename+'\n')
data=client.recv(1024)
f=open('2.txt','wb')
f.wrie(data)
f.close()
client.close()
server.close()
except :
server.close()
print("error\n")
Find=Search()
for l in Find:
print(l.GetAddress()+'\n'+l.GetName()+'\n')
Read(l.GetAddress())




نمی دونم مشکل از کجاست:عصبانی++:
برا recive کردن که اصلا Bind نمی شه
برا send هم connect می شه حتی رو گوشی پیغام وصل شدن می آد اما چیزی فرستاده نمی شه

sgb110
سه شنبه 10 آذر 1388, 00:12 صبح
سلام
من مشکلم رو تو لینوکس با lightblue حل کردم
اما تو ویندوز هنوز همون مشکل قبل رو دارم
یه مثال پیدا کردم که با pybluez یه فایل واسه گوشی فرستاده بود
اما فرمت این فایل از نوعه mailformat هست من می خوام یه فایل html بفرستم
نمی دونم فکر می کنم مشکل از هدر فایلی هست که می خوتم بفرستم
این کد برنامه ای هست که از تو وب پیدا کردم:

from bluetooth import *

# Bluetooth address and OBEX channel of the target device
# Replace them with the appropriate values for your device
target = ("00:15:A0:F9:E6:03", 10)

# Make a connection
sock = BluetoothSocket(RFCOMM)
sock.connect(target)

# Connect to the OBEX service
connect_pkg = "\x80\x00\x07\x10\x00\xff\xfe"
sock.send(connect_pkg)
con_recv=sock.recv(20)

if con_recv[0]=='\xa0':
# Now we are connected

# The name string that consists of a single 0x0009 character, which will
# cause the phone to lock up
name_str = "\x00\x09"

# Construct and send the malformed packet
name_header = "\x01\x00" + chr(len(name_str) + 5) + name_str + "\x00\x00";
body_header = "\x49\x00\xa0\x42\x45\x47\x49\x4e\x3a\x56\x43\x41\x 52\x44\x0d\x0a\x56" + "\x45\x52\x53\x49\x4f\x4e\x3a\x32\x2e\x31\x0d\x0a\x 4e\x3b\x45\x4e\x43" + "\x4f\x44\x49\x4e\x47\x3d\x38\x42\x49\x54\x3b\x43\x 48\x41\x52\x53\x45" + "\x54\x3d\x55\x54\x46\x2d\x38\x3a\x42\x6c\x6f\x67\x 67\x73\x3b\x4a\x6f" + "\x65\x0d\x0a\x54\x45\x4c\x3b\x50\x52\x45\x46\x3b\x 43\x45\x4c\x4c\x3b" + "\x56\x4f\x49\x43\x45\x3a\x30\x31\x32\x33\x34\x35\x 36\x37\x38\x39\x0d" + "\x0a\x54\x45\x4c\x3b\x56\x4f\x49\x43\x45\x3a\x30\x 31\x32\x33\x34\x35" + "\x36\x37\x38\x39\x0d\x0a\x45\x4d\x41\x49\x4c\x3a\x 72\x6f\x6f\x74\x40" + "\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d\x0d\x 0a\x45\x4e\x44\x3a" + "\x56\x43\x41\x52\x44\x0d\x0a"
put_pkg = "\x82\x00" + chr(len(name_header) + len(body_header) + 3) + name_header + body_header
print "Packet dump: ", binascii.b2a_hex(put_pkg)
sock.send(put_pkg)
print "Packet sent"

try:
resp = sock.recv(20)
print "Response dump: %s" %(binascii.b2a_hex(resp))
except:
print "Failed to receive response: ", sys.exc_info()[0]

sock.close()

لطفا کمکم کنید

sgb110
جمعه 13 آذر 1388, 12:31 عصر
سلام
مشکل ارسال و با pyobex حل کردم


from PyOBEX.client import *
client=Client(address,9)
client.connect()
client.put('sgb110.txt','salam ')
client.disconnect()

برا گرفتن اطلاعات باید کامپیوتر رو سرور قرار بدم و گوشی کلاینت بشه
من تو pyobex نتونستم سوکت رو سرور قرار بدم
(bind وaccept نداره )
از خود pybluez که استفاده می کنم داده می گیرم اما یه سری حروف بی معناست
وقتی هم که می خوام این رشته بی معنا رو به unicode تبدیل کنم خطا می گیره که :

UnicodeDecodeError: 'ascii' codec can't decode byte

برا رسیو این کار رو می کنم:


server=bluetooth.BluetoothSocket()
server.bind(('',0))
server.listen(1)
bluetooth.advertise_service( server, "My OBEX Service",service_classes = [ bluetooth.OBEX_OBJPUSH_CLASS ],profiles = [ bluetooth.OBEX_OBJPUSH_PROFILE] )
client,port=server.accept()
da=client.recv(1024)
#u = unicode( da)
#print(u)


کسی می دونه مشکل از کجاست؟؟