RFCOMM-Szenario: Empfangen einer Datei als Server (HTML)
[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]
Ein weiteres allgemeines RFCOMM-App-Szenario besteht darin, einen Dienst auf einem PC zu hosten und ihn anderen Geräten zur Verfügung zu stellen. In diesem Szenario erstellt der App-Entwickler zunächst einen RfcommServiceProvider, um für den gewünschten Dienst Werbung zu machen. Danach legt der Entwickler die SDP-Attribute nach Bedarf fest (mit established data helpers zum Erstellen der Attributdaten) und beginnt damit, für die SDP-Datensätze zu werben, damit sie andere Geräte abrufen können. Zur Herstellung einer Verbindung zu einem Client-Gerät erstellt der App-Entwickler einen Socketlistener, um mit dem Lauschen auf eingehende Verbindungsanforderungen zu beginnen. Sobald eine Verbindung hergestellt ist, kann der Entwickler das verbundene Socket zur späteren Verarbeitung speichern. Wenn eine Datei empfangen werden soll, kann der App-Entwickler etablierte Datenstrommuster befolgen, um Datenblöcke von InputStream des Sockets auszulesen und sie in einer Datei zu speichern.
var _provider; // Windows.Devices.Bluetooth.RfcommServiceProvider
function Initialize()
{
// Initialize the provider for the hosted RFCOMM service
Windows.Devices.Bluetooth.RfcommServiceProvider.createAsync(
RfcommServiceId.obexObjectPush)
.done(function(provider) {
_provider = provider;
// Create a listener for this service and start listening
var listener = new StreamSocketListener();
listener.addEventListener(
“connectionreceived”, OnConnectionReceived);
return listener.bindServiceNameAsync(
_provider.serviceId.asString(),
SocketProtectionLevel
.bluetoothEncryptionAllowNullAuthentication);
}).done(function() {
// Set the SDP attributes and start advertising
InitializeServiceSdpAttributes(_provider);
_provider.startAdvertising();
)};
}
var SERVICE_VERSION_ATTRIBUTE_ID = 0x0300;
var SERVICE_VERSION_ATTRIBUTE_TYPE = 0x0A; // UINT32
var SERVICE_VERSION = 200;
function InitializeServiceSdpAttributes(RfcommServiceProvider provider)
{
var writer = new Windows.Storage.Streams.DataWriter();
// First write the attribute type
writer.writeByte(SERVICE_VERSION_ATTRIBUTE_TYPE)
// Then write the data
writer.writeUint32(SERVICE_VERSION);
var data = writer.detachBuffer();
provider.sdpRawAttributes.add(SERVICE_VERSION_ATTRIBUTE_ID, data);
}
void OnConnectionReceived(listener, args)
{
// Stop advertising/listening so that we’re only serving one client
_provider.stopAdvertising();
listener.close()
.done(function() {
_socket = args.socket;
// The client socket is connected. At this point the App can wait for
// the user to take some action, e.g. click a button to receive a
// file from the device, which could invoke the Picker and then save
// the received file to the picked location. The transfer itself
// would use the Sockets API and not the Rfcomm API, and so is
// omitted here for brevity.
});
}