# زبان های اسکریپتی > دیگر زبان های اسکریپتی >  pybluez

## sgb110

سلام
من می خوام با بلوتوث یه فایل رو برا گوشی بفرستم
با کمک 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

سلام
من مشکلم رو تو لینوکس با 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\  x52\x44\x0d\x0a\x56" + "\x45\x52\x53\x49\x4f\x4e\x3a\x32\x2e\x31\x0d\x0a\  x4e\x3b\x45\x4e\x43" + "\x4f\x44\x49\x4e\x47\x3d\x38\x42\x49\x54\x3b\x43\  x48\x41\x52\x53\x45" + "\x54\x3d\x55\x54\x46\x2d\x38\x3a\x42\x6c\x6f\x67\  x67\x73\x3b\x4a\x6f" + "\x65\x0d\x0a\x54\x45\x4c\x3b\x50\x52\x45\x46\x3b\  x43\x45\x4c\x4c\x3b" + "\x56\x4f\x49\x43\x45\x3a\x30\x31\x32\x33\x34\x35\  x36\x37\x38\x39\x0d" + "\x0a\x54\x45\x4c\x3b\x56\x4f\x49\x43\x45\x3a\x30\  x31\x32\x33\x34\x35" + "\x36\x37\x38\x39\x0d\x0a\x45\x4d\x41\x49\x4c\x3a\  x72\x6f\x6f\x74\x40" + "\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d\x0d\  x0a\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

سلام
مشکل ارسال و با 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)


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

----------

