SO WIRD'S GEMACHT: Stellen Sie eine Datei Infrarotübertragung

Dieser Dokumentation für die Vorschau nur ist und in späteren Versionen geändert. Leere Themen wurden als Platzhalter eingefügt.]

.NET Compact Framework stellt Klassen für die Infrarotkommunikation zwischen Geräten bereit. In diesem Beispiel wird veranschaulicht, wie senden und Empfangen von Dateien zwischen Geräten mit Infrarotkommunikation. Sie benötigen zwei Pocket PCs eine zum Senden der Datei und eine empfangen.

Dieses Beispiel erstellt eine Instanz von IrDAClient und seine DiscoverDevices-Methode verwendet, um Infrarotgeräte in Reichweite zu ermitteln. Diese Methode gibt ein Array von IrDADeviceInfo-Objekten, die Informationen jedes Gerät zurück.

In diesem Beispiel enthält Code zum Senden und Empfangen einer Datei, die veranschaulicht, die mit einer Schaltfläche und empfangen. Minimal, müssen Sie eine Anwendung senden für ein Gerät und eine Anwendung empfangen, für das andere Gerät erstellen.

Die Schaltfläche Senden sendet eine Datei nur an ein Gerät, die Anforderungen an eine Datei gesendet werden überwacht. Daher muss die Schaltfläche empfangen auf dem empfangenden Gerät getippt werden, bevor auf dem sendenden Gerät auf die Schaltfläche Senden getippt wird. Die folgenden Aufgaben werden ausgeführt:

  • Beziehen Sie einen Stream von zu sendenden Datei.

  • Erstellen Sie eine IrDAClient-Instanz mit dem Dienstnamen für diese Anwendung bestimmt. Infrarotverbindungen werden vorgenommen, indem Sie einen Dienstnamen, der einen beliebigen Wert sein kann, vorausgesetzt, dass die beteiligten Geräte auf dem gleichen Namen verweisen angeben. Der Dienstname lautet "IrDATest"In diesem Beispiel.

  • Lesen Sie den Stream der Datei IrDAClient-Stream, der die Datei sendet.

Schaltfläche Receive erstellt eine IrDAListener Instanz um das Gerät mit dem Dienst-Namen wie die Instanz IrDAClient auf dem sendenden Gerät zu überwachen.

Die folgenden Aufgaben werden ausgeführt:

  • Erstellen Sie einen Stream zum Schreiben des übertragenen Inhalts in eine empfangende Datei im Ordner eigene Dateien.

  • Erstellen Sie eine IrDAEndPoint-Instanz mit dem Geräte-ID und Namen für das sendende Gerät service.

  • Erstellen Sie eine IrDAListener -Instanz aus der Instanz IrDAEndPoint, und starten Sie den überwachenden Dienst.

  • Erstellen Sie eine IrDAClient -Instanz, aus der Verwendung der Methode IrDAListenerAcceptIrDAClient Instanz.

  • Lesen Sie den zugrunde liegenden Stream der IrDAClient-Instanz, die die Daten der übertragenen Datei enthält.

  • Schreiben Sie diesen Datenstream in den Stream für die Datei Receive.txt.

Um die Anwendungen zu erstellen

  1. Erstellen Sie eine Pocket PC-Anwendung für das sendende Gerät und fügen Sie eine Schaltfläche zum Formular. Name der Schaltfläche senden.

  2. Erstellen Sie eine Datei mit dem Namen Send.txt im Ordner eigene Dateien.

  3. Fügen Sie folgenden Code für die Schaltfläche Senden Click Ereignis.

                                ' Align the infrared ports of the devices.
                                ' Click the Receive button first, then click Send.
                                Private
                                Sub SendButton_Click(sender AsObject, e As System.EventArgs) _
        Handles SendButton.Click
    
        Dim irClient AsNew IrDAClient()
        Dim irServiceName AsString = "IrDATest"Dim irDevices() As IrDADeviceInfo
        Dim buffersize AsInteger = 256
    
        ' Create a collection of devices to discover.
        irDevices = irClient.DiscoverDevices(2)
    
        ' Show the name of the first device found.If irDevices.Length = 0 Then
            MessageBox.Show("No remote infrared devices found.")
            ReturnEndIfTryDim irEndP AsNew IrDAEndPoint(irDevices(0).DeviceID, _
                irServiceName)
            Dim irListen AsNew IrDAListener(irEndP)
            irListen.Start()
            irClient = irListen.AcceptIrDAClient()
            MessageBox.Show("Connected!")
    
        Catch exSoc As SocketException
             MessageBox.Show("Couldn't listen on service " & irServiceName & ": " _
                & exSoc.ErrorCode)
        EndTry
        ' Open a file to send and get its stream.Dim fs As Stream
        Try
            fs = New FileStream(".\My Documents\send.txt", FileMode.Open)
        Catch exFile As Exception
            MessageBox.Show("Cannot open " & exFile.ToString())
            ReturnEndTry
        ' Get the underlying stream of the client.Dim baseStream As Stream = irClient.GetStream()
    
        ' Get the size of the file to send    ' and write its size to the stream.Dim length AsByte() = BitConverter.GetBytes(fs.Length)
        baseStream.Write(length, 0, length.Length)
    
        ' Create a buffer for reading the file.Dim buffer(buffersize) AsByteDim fileLength AsInteger = CInt(fs.Length)
    
        Try        ' Read the file stream into the base stream.While fileLength > 0
                Dim numRead As Int64 = fs.Read(buffer, 0, buffer.Length)
                baseStream.Write(buffer, 0, numRead)
                fileLength -= numRead
            EndWhile
            MessageBox.Show("File sent")
        Catch exSend As Exception
            MessageBox.Show(exSend.Message)
        EndTry
    
        fs.Close()
        baseStream.Close()
        irClient.Close()
    EndSub
    
                                // Align the infrared ports of the devices.
                                // Click the Receive button first, then click Send.
                                private
                                void SendButton_Click(object sender, System.EventArgs e)
        {
            IrDAClient irClient = new IrDAClient();
            string irServiceName = "IrDATest";
            IrDADeviceInfo[] irDevices;
            int buffersize = 256;
    
            // Create a collection of devices to discover.
            irDevices = irClient.DiscoverDevices(2);
    
            // Show the name of the first device found.if ((irDevices.Length == 0)) 
            {
                MessageBox.Show("No remote infrared devices found.");
                return;
            }
            try 
            {
                IrDAEndPoint irEndP = 
                    new IrDAEndPoint(irDevices[0].DeviceID, irServiceName);
                IrDAListener irListen = new IrDAListener(irEndP);
                irListen.Start();
                irClient = irListen.AcceptIrDAClient();
                MessageBox.Show("Connected!");
            }
            catch (SocketException exSoc) 
            {
                MessageBox.Show(("Couldn\'t listen on service "
                                + (irServiceName + (": " + exSoc.ErrorCode))));
            }
    
            // Open a file to send and get its stream.
            Stream fs;
            try 
            {
                fs = new FileStream(".\\My Documents\\send.txt", FileMode.Open);
            }
            catch (Exception exFile) 
            {
                MessageBox.Show(("Cannot open " + exFile.ToString()));
                return;
            }
    
            // Get the underlying stream of the client.
            Stream baseStream = irClient.GetStream();
    
            // Get the size of the file to send// and write its size to the stream.byte[] length = BitConverter.GetBytes(fs.Length);
            baseStream.Write(length, 0, length.Length);
    
            // Create a buffer for reading the file.byte[] buffer = newbyte[buffersize];
            int fileLength = (int) fs.Length;
            try 
            {
                // Read the file stream into the base stream.while ((fileLength > 0)) 
                {
                    Int64 numRead = fs.Read(buffer, 0, buffer.Length);
                    baseStream.Write(buffer, 0, Convert.ToInt32(numRead));
                    fileLength = (fileLength - Convert.ToInt32(numRead));
                }
                MessageBox.Show("File sent");
            }
            catch (Exception exSend) 
            {
                MessageBox.Show(exSend.Message);
            }
            fs.Close();
            baseStream.Close();
            irClient.Close();
        }
    
    
  4. Erstellen Sie eine Pocket PC-Anwendung für das empfangende Gerät und fügen Sie eine Schaltfläche zum Formular. Name der Schaltfläche empfangen.

  5. Fügen Sie folgenden Code für die Schaltfläche empfangen Click Ereignis.

                                ' Align the infrared ports of the devices.
                                ' Click the Receive button first, then click Send.
                                Private
                                Sub ReceiveButton_Click(sender AsObject, e As System.EventArgs) _
        Handles ReceiveButton.Click
    
        Dim irDevices() As IrDADeviceInfo
        Dim irClient AsNew IrDAClient()
        Dim irServiceName AsString = "IrDATest"Dim buffersize AsInteger = 256
    
        ' Create a collection for discovering up to    ' three devices, although only one is needed.
        irDevices = irClient.DiscoverDevices(2)
    
        ' Cancel if no devices are found.If irDevices.Length = 0 Then
            MessageBox.Show("No remote infrared devices found.")
            ReturnEndIf
        ' Connect to the first IrDA deviceDim irEndP AsNew IrDAEndPoint(irDevices(0).DeviceID, irServiceName)
        irClient.Connect(irEndP)
    
        ' Create a stream for writing a Pocket Word file.Dim writeStream As Stream
        Try
            writeStream = New FileStream(".\My Documents\receive.txt", _
                FileMode.OpenOrCreate)
        Catch
            MessageBox.Show("Cannot open file for writing.")
            ReturnEndTry
        ' Get the underlying stream of the client.Dim baseStream As Stream = irClient.GetStream()
    
        ' Create a buffer for reading the file.Dim buffer(buffersize) AsByteDim numToRead, numRead As Int64
    
        ' Read the file into a stream 8 bytes at a time.    ' Because the stream does not support seek operations,    ' its length cannot be determined.
        numToRead = 8
    
        TryWhile numToRead > 0
                numRead = baseStream.Read(buffer, 0, numToRead)
                numToRead -= numRead
            EndWhileCatch exReadIn As Exception
            MessageBox.Show("Read in: " & exReadIn.Message)
        EndTry
        ' Get the size of the buffer to show    ' the number of bytes to write to the file.
        numToRead = BitConverter.ToInt64(buffer, 0)
    
        Try        ' Write the stream to the file until        ' there are no more bytes to read.While numToRead > 0
                numRead = baseStream.Read(buffer, 0, buffer.Length)
                numToRead -= numRead
                writeStream.Write(buffer, 0, numRead)
            EndWhile
            writeStream.Close()
            MessageBox.Show("File received.")
        Catch exWriteOut As Exception
            MessageBox.Show("Write out: " & exWriteOut.Message)
        EndTry
    
         baseStream.Close()
         irClient.Close()
    EndSub
    
                                // Align the infrared ports of the devices.
                                // Click the Receive button first, then click Send.
                                private
                                void ReceiveButton_Click(object sender, System.EventArgs e)
    {
        IrDADeviceInfo[] irDevices;
        IrDAClient irClient = new IrDAClient();
        string irServiceName = "IrDATest";
        int buffersize = 256;
    
        // Create a collection for discovering up to// three devices, although only one is needed.
        irDevices = irClient.DiscoverDevices(2);
    
        // Cancel if no devices are found.if ((irDevices.Length == 0)) 
        {
            MessageBox.Show("No remote infrared devices found.");
            return;
        }
    
        // Connect to the first IrDA device
        IrDAEndPoint irEndP = 
            new IrDAEndPoint(irDevices[0].DeviceID, irServiceName);
        irClient.Connect(irEndP);
    
        // Create a stream for writing a Pocket Word file.
        Stream writeStream;
        try 
        {
            writeStream = new FileStream(".\\My Documents\\receive.txt", 
                FileMode.OpenOrCreate);
        }
        catch (Exception Ex)
        {
            MessageBox.Show("Cannot open file for writing. " + Ex.Message);
            return;
        }
    
        // Get the underlying stream of the client.
        Stream baseStream = irClient.GetStream();
    
        // Create a buffer for reading the file.byte[] buffer = newbyte[buffersize];
        Int64 numToRead;
        Int64 numRead;
    
        // Read the file into a stream 8 bytes at a time.// Because the stream does not support seek operations, its// length cannot be determined.
        numToRead = 8;
        try 
        {
            while ((numToRead > 0)) 
            {
                numRead = baseStream.Read(buffer, 0, 
                    Convert.ToInt32(numToRead));
                numToRead = (numToRead - numRead);
            }
        }
        catch (Exception exReadIn) {
            MessageBox.Show(("Read in: " + exReadIn.Message));
        }
    
        // Get the size of the buffer to show// the number of bytes to write to the file.
        numToRead = BitConverter.ToInt64(buffer, 0);
        try 
        {
            // Write the stream to the file until// there are no more bytes to read.while ((numToRead > 0)) {
                numRead = baseStream.Read(buffer, 0, buffer.Length);
                numToRead = (numToRead - numRead);
                writeStream.Write(buffer, 0, Convert.ToInt32(numRead));
            }
            writeStream.Close();
            MessageBox.Show("File received.");
        }
        catch (Exception exWriteOut) 
        {
            MessageBox.Show(("Write out: " + exWriteOut.Message));
        }
        baseStream.Close();
        irClient.Close();
    }
    

Zum Ausführen der Anwendungen

  1. Bereitstellen von Anwendungen mit den Geräten, und starten Sie.

  2. Richten Sie die Infrarotanschlüsse der Geräte.

  3. Tippen Sie auf empfangen, auf dem empfangenden Gerät.

  4. Tippen Sie auf senden, auf dem sendenden Gerät.

  5. Überprüfen Sie, ob Receive.txt im Ordner eigene Dateien erstellt wurde.

Kompilieren des Codes

In diesem Beispiel sind Verweise auf die folgenden Namespaces erforderlich:

Siehe auch

Konzepte

Infrarot-Netzwerkverbindungen

.NET compact Framework Gewusst-wie-Themen