2013-04-05 8 views
11

के साथ ब्लूटूथ सर्वर ब्लूटूथ सॉकेट के लिए मूल समर्थन के साथ पाइथन 3.3 आया। दुर्भाग्यवश, यह अभी तक बहुत अच्छी तरह से प्रलेखित नहीं है (documentation में इसका केवल एक उल्लेख है)।पाइथन 3.3

क्लाइंट को लागू करने के बारे में a blog post है, लेकिन मुझे सर्वर बनाने के बारे में कुछ भी नहीं मिला।

अधिक विशेष रूप से, उपयोगकर्ता के अनुकूल नाम को सेट करने और सेवा का विज्ञापन कैसे करें।

तो,

import socket 

serverSocket = socket.socket(socket.AF_BLUETOOTH, 
          socket.SOCK_STREAM, 
          socket.BTPROTO_RFCOMM) 
serverSocket.setTimeout(1) 
serverSocket.bind(("", 1)) 
serverSocket.listen(1) 

something.advertise_service(something something) 

कोई भी विचार की तरह कुछ?

+1

ऐसा लगता है कि वे मूल रूप से एकीकृत pybluez एकीकृत करते हैं। उन उदाहरणों पर नज़र डालें: https://code.google.com/p/pybluez/source/browse/trunk/examples/simple/rfcomm-server.py – TJD

+1

'advertise_service' सॉकेट मॉड्यूल में मौजूद नहीं है और न ही इसमें सर्वर सॉकेट, और पाइथन के स्रोत कोड में 'विज्ञापन' खोजना केवल तीन असंबद्ध टिप्पणियां पाता है। –

+1

मैं एक ही समस्या में आया था। मैं एक साधारण सर्वर बना सकता था, लेकिन विज्ञापित सेवाओं जैसे कार्यों को पूरा नहीं कर सका। यदि आप रुचि रखते हैं, तो आप यहां क्लाइंट-सर्वर एप्लिकेशन के लिए कोड देख सकते हैं: http://kevindoran1.blogspot.co.nz/2013/04/bluetooth-programming-with-python-3.html – Kevin

उत्तर

11

बुरी खबर: पायथन बॉक्स के बाहर क्या करना चाहते हैं, इसका समर्थन करने के लिए प्रकट नहीं होता है। (कम से कम socketmodule.c में नहीं)।

अजगर/ब्लूटूथ उपयोगकर्ताओं मैं उपयोग pybluez देखा है, हालांकि यह बाद से 2009

अच्छी खबर अद्यतन नहीं किया गया है में से अधिकांश: मैं उनके स्रोत (लिनक्स कनेक्शन के लिए) के माध्यम से चला गया, और पाया विज्ञापन सेवाओं के लिए प्रासंगिक बिट्स। अधिकांश कोड अनिवार्य रूप से socketmodule.c के पायथन 2.2 संस्करण से कॉपी-पेस्ट किया गया है।

pybluez उन सभी ब्लूटूथ उपहारों को लागू करने के लिए socket ऑब्जेक्ट के लिए कुछ अतिरिक्त कार्यक्षमता को परिभाषित करता है। यह बहुत कम स्तर नहीं मिलता है, और इसके बजाय BlueZ पर निर्भर करता है। जो मैं बता सकता हूं, वह मूल रूप से पाइथन ऑब्जेक्ट्स लेता है और BlueZ द्वारा अपेक्षित डेटा संरचनाएं बनाता है और बस उसे कॉल करता है। यदि आप pybluez का उपयोग नहीं करना चाहते/नहीं कर सकते हैं, तो आपको किसी भी तरह की अनुपलब्ध कार्यक्षमता को लागू करना होगा। मुझे लगता है कि आप इसे सी-प्रकार के साथ कर सकते हैं। सेवा विज्ञापन के लिए प्रासंगिक भाग btmodule.c, लाइन 2562-2642 में हैं।

pybluez के लिए स्रोत में एक अजगर -3 शाखा है, हालांकि मुझे नहीं पता कि यह काम करता है या नहीं।

आप pybluez का उपयोग करने का फैसला करते हैं, तो एक उदाहरण से their source

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 ], 
       ) 

लिया गूगल कोड बंद हो रहा है के रूप में, कोड भी GitHub here पर पाया जा सकता।

+0

धन्यवाद, मुझे लगता है कि मैं पीसी के रूप में पीसी का उपयोग समाप्त कर दूंगा क्योंकि मुझे py3 का उपयोग करने की आवश्यकता है। –

संबंधित मुद्दे