Freigeben über


IrDAClient-Klasse

Stellt Verbindungsdienste für eine Infrarotverbindung bereit.

Namespace: System.Net.Sockets
Assembly: System.Net.IrDA (in system.net.irda.dll)

Syntax

'Declaration
Public Class IrDAClient
'Usage
Dim instance As IrDAClient
public class IrDAClient
public ref class IrDAClient
public class IrDAClient
public class IrDAClient

Hinweise

Stellt Dienste für einen Infrarotendpunkt bereit, die das Herstellen von Verbindungen, Abrufen von Datenströmen und Suchen von Geräten umfassen.

Aufgrund unterschiedlicher Protokolle können Sie Infrarotstrahlfeatures nicht interaktiv auf dem Pocket PC mit einer .NET Compact Framework-Infrarotanwendung verwenden. Protokollunterschiede bestehen auch bei den integrierten Infrarotfeatures auf einem Laptop oder einem Desktopcomputer.

Infrarotverbindungen werden durch Angeben eines Servicenamens hergestellt, der einen beliebigen Wert aufweisen kann, sofern die beteiligten Geräte auf den gleichen Namen verweisen.

Thema Position
Gewusst wie: Übertragen von Dateien über eine Infrarotverbindung .NET Compact Framework
Gewusst wie: Übertragen von Dateien über eine Infrarotverbindung .NET Compact Framework
Gewusst wie: Übertragen von Dateien über eine Infrarotverbindung .NET Compact Framework
SO WIRD'S GEMACHT: Stellen Sie eine Datei Infrarotübertragung dv_fxnetcf

Beispiel

In diesem Codebeispiel wird veranschaulicht, wie Dateien mit Geräten gesendet und empfangen werden können, die Infrarotverbindungen verwenden. Sie benötigen zwei Pocket PCs, wovon einer das Gerät zum Senden der Datei und der andere das Gerät zum Empfangen der Datei darstellt. Gehen Sie folgendermaßen vor, um dieses Beispiel auszuführen:

  1. Erstellen Sie dieses Beispiel.

  2. Erstellen Sie in dem Gerät, das zum Senden der Datei verwendet wird, im Ordner Eigene Dateien eine Textdatei mit dem Namen send.txt.

  3. Richten Sie die Infrarotanschlüsse der Geräte aus.

  4. Starten Sie die Anwendung IrDADemo.exe auf beiden Geräten.

  5. Klicken Sie auf beiden Geräten auf die Schaltfläche Suchen, um eine Liste der verfügbaren Infrarotgeräte anzuzeigen.

  6. Wählen Sie auf dem Gerät, das die Datei empfangen soll, das Gerät aus, das die Datei sendet, und klicken Sie dann auf die Schaltfläche Empfangen. Auf diese Schaltfläche müssen Sie klicken, bevor Sie auf dem sendenden Gerät auf Senden klicken.

  7. Klicken Sie auf dem Gerät, das die Datei sendet, auf die Schaltfläche Senden.

  8. Das empfangende Gerät empfängt die Datei, die im Ordner Eigene Dateien als Datei mit dem Namen receive.txt gespeichert wird.

Imports System
Imports System.Windows.Forms
Imports System.Net
Imports System.Net.Sockets
Imports System.IO
Imports Microsoft.VisualBasic

Public Class Form1
    Inherits System.Windows.Forms.Form
    Private ListBox1 As System.Windows.Forms.ListBox
    Private StatusBar1 As System.Windows.Forms.StatusBar
    Private WithEvents Send As System.Windows.Forms.Button
    Private WithEvents Receive As System.Windows.Forms.Button
    Private WithEvents Discover As System.Windows.Forms.Button

    Dim irListen As IrDAListener
    Dim irClient As IrDAClient
    Dim irEndP As IrDAEndPoint
    Dim irDevices() As IrDADeviceInfo

    Private fileSend As String
    Private fileReceive As String
    Private irServiceName As String

    Private buffersize As Integer

    Public Sub New()
        InitializeComponent()
    End Sub 

    Private Sub Form1_Load(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles MyBase.Load

        ' Display Pocket PC OK button for closing.
        Me.MinimizeBox = False
    End Sub

    Protected Overrides Sub Dispose(disposing As Boolean)
        MyBase.Dispose(disposing)
    End Sub 

    Private Sub InitializeComponent()
        Me.Send = New System.Windows.Forms.Button
        Me.ListBox1 = New System.Windows.Forms.ListBox
        Me.Receive = New System.Windows.Forms.Button
        Me.StatusBar1 = New System.Windows.Forms.StatusBar
        Me.Discover = New System.Windows.Forms.Button
        '
        ' Send
        '
        Me.Send.Location = New System.Drawing.Point(16, 120)
        Me.Send.Size = New System.Drawing.Size(80, 20)
        Me.Send.Text = "Send File"
        '
        ' ListBox1
        '
        Me.ListBox1.Location = New System.Drawing.Point(16, 48)
        Me.ListBox1.Size = New System.Drawing.Size(200, 58)
        '
        ' Receive
        '
        Me.Receive.Location = New System.Drawing.Point(136, 120)
        Me.Receive.Size = New System.Drawing.Size(80, 20)
        Me.Receive.Text = "Receive File"
        '
        ' StatusBar1
        '
        Me.StatusBar1.Location = New System.Drawing.Point(0, 248)
        Me.StatusBar1.Size = New System.Drawing.Size(240, 22)
        '
        ' Discover
        '
        Me.Discover.Location = New System.Drawing.Point(16, 16)
        Me.Discover.Size = New System.Drawing.Size(112, 20)
        Me.Discover.Text = "Discover Devies"
        '
        ' Form1
        '
        Me.Controls.Add(Discover)
        Me.Controls.Add(StatusBar1)
        Me.Controls.Add(Receive)
        Me.Controls.Add(ListBox1)
        Me.Controls.Add(Send)
        Me.Text = "IrDA Demo"
    End Sub 

    Shared Sub Main()
        Application.Run(New Form1())
    End Sub

    ' Discover and list the available infrared devices.
    ' Infrared ports must be aligned.
    Private Sub Discover_Click(sender As Object, e As System.EventArgs) _
        Handles Discover.Click

        ' Create a collection of a maximum of three devices.
        irDevices = irClient.DiscoverDevices(2)

        ' Show a message if no devices are found.
        If irDevices.Length = 0 Then
            MsgBox("No remote infrared devices found!")
            Return
        End If

        ' Enumerate the IrDADeviceInfo
        ' array and list device information
        ' for each device in the list box.
        Dim device As String
        Dim ID As Integer
        ListBox1.Items.Clear()
        For Each irDevice As IrDADeviceInfo In  irDevices
            ID = BitConverter.ToInt32(irDevice.DeviceID, 0)
            device = ID.ToString() _
                & " " & irDevice.DeviceName _
                & " " & irDevice.CharacterSet _
                & " " & irDevice.Hints
            ListBox1.Items.Add(device)
        Next irDevice

        ListBox1.SelectedIndex = 0
        If irDevices.Length > 0 Then
            StatusBar1.Text = irDevices.Length.ToString() & " remote device(s)"
        End If 

        ' Enable the Send and Receive buttons.
        Send.Enabled = True
        Receive.Enabled = True
    End Sub 

    Private Sub IrDAConfig()

        irClient = New IrDAClient()

        ' Files for sending and receiving.
        fileSend = ".\My Documents\send.txt"
        fileReceive = ".\My Documents\receive.txt"

        ' Specify a name for the IrDA Service.
        ' It can be any name, provided all 
        ' participating devices use the same name.
        irServiceName = "IrDAFtp"

        ' Set maximum buffer size for file transfers.
        buffersize = 256

        ' Disable Send and Receive buttons until devices are discovered.
        Send.Enabled = False
        Receive.Enabled = False

    End Sub

    ' Sends a file.
    Private Sub Send_Click(sender As Object, e As System.EventArgs) _
        Handles Send.Click

        ' Open the file to send and get its stream.
        Dim fs As Stream
        Try
            fs = New FileStream(fileSend, FileMode.Open)
        Catch exFile As Exception
            MsgBox("Cannot open " & exFile.ToString())
            Return
        End Try

        ' Create an IrDA client with a service name that must
        ' match the service name of the receiving IrDA client.
        Try
            irClient = New IrDAClient(irServiceName)
        Catch exS As SocketException
            MsgBox("Create socket error: " & exS.Message & _
                " - Did you click Receive on the other device?")
            Return
        End Try

        ' 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 As Byte() = BitConverter.GetBytes(Fix(fs.Length))
        baseStream.Write(length, 0, length.Length)

        ' Create a buffer for reading the file.
        Dim buffer(buffersize) As Byte

        ' Display the number of bytes being sent.
        Dim fileLength As Integer = CInt(fs.Length)
        StatusBar1.Text = "Sending " & fileLength & " bytes"

        ' Read the file stream into the base stream.
        While fileLength > 0
            Dim numRead As Integer = fs.Read(buffer, 0, buffer.Length)
            baseStream.Write(buffer, 0, numRead)
            fileLength -= numRead
        End While

        fs.Close()
        baseStream.Close()
        irClient.Close()
        StatusBar1.Text = "File sent"
    End Sub 

    ' Receives a file.
    Private Sub Receive_Click(sender As Object, e As System.EventArgs) _
        Handles Receive.Click

        ' Create a stream for writing the file.
        Dim writeStream As Stream
        Try
            writeStream = New FileStream(fileReceive, FileMode.OpenOrCreate)
        Catch 
            MsgBox("Couldn't open " & fileReceive & " for writing")
            Return
        End Try

        ' Create a connection, with the IrDAEndPoint class,
        ' for the selected device in the list box.
        ' Start listening for incoming requests from
        ' that device with an IrDAListener object.
        Try
            Dim i As Integer = ListBox1.SelectedIndex
            irEndP = New IrDAEndPoint(irDevices(i).DeviceID, irServiceName)
            irListen = New IrDAListener(irEndP)
            irListen.Start()
        Catch exSoc As SocketException
            MsgBox("Couldn't listen on service " & irServiceName & ": " _
                & exSoc.ErrorCode)
        End Try

        ' Show listening for selected device.
        StatusBar1.Text = "Listening for " & ListBox1.SelectedItem.ToString()

        ' Create a client connection for the
        ' service detected by the listener.
        Dim irClient As IrDAClient
        Try
            irClient = irListen.AcceptIrDAClient()
        Catch exp As SocketException
            MsgBox("Couldn't accept socket " & exp.ErrorCode)
            Return
        End Try

        ' Show whether a transfer from
        ' the remote device is pending.
        If irListen.Pending() = True Then
            StatusBar1.Text = "Pending from " & irClient.RemoteMachineName
        Else
            StatusBar1.Text = "Not pending from " & irClient.RemoteMachineName
        End If

        ' Get the underlying stream of the client.
        Dim baseStream As Stream = irClient.GetStream()

        Dim numToRead As Integer

        'Create a buffer for reading the file.
        Dim buffer(buffersize) As Byte

        ' Read the stream of data, which contains
        ' the data from the remote device, until
        ' there are no more bytes to read.
        numToRead = 4
        While numToRead > 0
            Dim numRead As Integer = baseStream.Read(buffer, 0, numToRead)
            numToRead -= numRead
        End While

        ' Get the size of the buffer to show
        ' the number of bytes to write to the file.
        numToRead = BitConverter.ToInt32(buffer, 0)
        StatusBar1.Text = "Going to write " & numToRead & " bytes"

        ' Write the stream to the file until
        ' there are no more bytes to read.
        While numToRead > 0
            Dim numRead As Integer = baseStream.Read(buffer, 0, buffer.Length)
            numToRead -= numRead
            writeStream.Write(buffer, 0, numRead)
        End While

        ' Show that the file was received.
        StatusBar1.Text = "File received"

        baseStream.Close()
        writeStream.Close()
        irListen.Stop()
        irClient.Close()
    End Sub 
End Class
using System;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;

namespace IrDADemo
{
    public class Form1 : System.Windows.Forms.Form
    {
        private System.Windows.Forms.ListBox listBox1;
        private System.Windows.Forms.StatusBar statusBar1;
        private System.Windows.Forms.Button Send;
        private System.Windows.Forms.Button Receive;
        private System.Windows.Forms.Button Discover;

        private IrDAListener irListen;
        private IrDAClient irClient;
        private IrDAEndPoint irEndP;
        private IrDADeviceInfo[] irDevices;

        string fileSend;
        string fileReceive;
        string irServiceName;

        int buffersize;

        public Form1()
        {
            InitializeComponent();

            irClient = new IrDAClient();

            // Files for sending and receiving.
            fileSend = ".\\My Documents\\send.txt";
            fileReceive = ".\\My Documents\\receive.txt";

            // Specify a name for the IrDA Service.
            // It can be any name, provided all
            // participating devices use the same name.
            irServiceName = "IrDAFtp";

            // Set maximum buffer size for file transfers.
            buffersize = 256;

            // Display Pocket PC OK button for closing.
            this.MinimizeBox = false;

            // Disable Send and Receive buttons until devices are discovered.
            Send.Enabled = false;
            Receive.Enabled = false;
        }

        protected override void Dispose(bool disposing)
        {
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code
        private void InitializeComponent()
        {
            this.Send = new System.Windows.Forms.Button();
            this.listBox1 = new System.Windows.Forms.ListBox();
            this.Receive = new System.Windows.Forms.Button();
            this.statusBar1 = new System.Windows.Forms.StatusBar();
            this.Discover = new System.Windows.Forms.Button();
            //
            // Send Button
            //
            this.Send.Location = new System.Drawing.Point(16, 120);
            this.Send.Size = new System.Drawing.Size(80, 20);
            this.Send.Text = "Send File";
            this.Send.Click += new System.EventHandler(this.Send_Click);
            //
            // listBox1
            //
            this.listBox1.Location = new System.Drawing.Point(16, 48);
            this.listBox1.Size = new System.Drawing.Size(200, 58);
            //
            // Receive Button
            //
            this.Receive.Location = new System.Drawing.Point(136, 120);
            this.Receive.Size = new System.Drawing.Size(80, 20);
            this.Receive.Text = "Receive File";
            this.Receive.Click += new System.EventHandler(this.Receive_Click);
            //
            // statusBar1
            //
            this.statusBar1.Location = new System.Drawing.Point(0, 248);
            this.statusBar1.Size = new System.Drawing.Size(240, 22);
            //
            // Discover Button
            //
            this.Discover.Location = new System.Drawing.Point(16, 16);
            this.Discover.Size = new System.Drawing.Size(112, 20);
            this.Discover.Text = "Discover Devies";
            this.Discover.Click += new System.EventHandler(this.Discover_Click);
            //
            // Form1
            //
            this.Controls.Add(this.Discover);
            this.Controls.Add(this.statusBar1);
            this.Controls.Add(this.Receive);
            this.Controls.Add(this.listBox1);
            this.Controls.Add(this.Send);
            this.Text = "IrDA Demo";
        }
        #endregion

        static void Main()
        {
            Application.Run(new Form1());
        }

        // Discover and list the available infrared devices.
        // Infrared ports must be aligned.
        private void Discover_Click(object sender, System.EventArgs e)
        {
            // Create a collection of a maximum of three devices.
            irDevices = irClient.DiscoverDevices(2);

            // Show a message if no devices are found.
            if (irDevices.Length == 0)
            {
                MessageBox.Show("No remote infrared devices found!");
                return;
            }

            // Enumerate the IrDADeviceInfo
            // array and list device information
            // for each device in the list box.
            string device;
            int ID;
            listBox1.Items.Clear();
            foreach(IrDADeviceInfo irDevice in irDevices)
            {
                ID = BitConverter.ToInt32(irDevice.DeviceID, 0);
                device = ID.ToString() + " " + irDevice.DeviceName + " "
                    +  irDevice.CharacterSet + " " + irDevice.Hints;
                listBox1.Items.Add(device);
            }

            listBox1.SelectedIndex = 0;
            if(irDevices.Length > 0)
                statusBar1.Text = 
                    irDevices.Length.ToString() + " remote device(s)";


            // Enable the Send and Receive buttons.
            Send.Enabled = true;
            Receive.Enabled = true;

        }


        // Sends a file.
        private void Send_Click(object sender, System.EventArgs e)
        {
            // Open the file to send and get its stream.
            Stream fileStream;
            try
            {
                fileStream = new FileStream(fileSend, FileMode.Open);
            }
            catch(Exception exFile)
            {
                MessageBox.Show("Cannot open " + exFile.ToString());
                return;
            }

            // Create an IrDA client with a service name that must
            // match the service name of the receiving IrDA client.
            try
            {
                irClient = new IrDAClient(irServiceName);
            }
            catch(SocketException exS)
            {
                MessageBox.Show("Create socket error: " + exS.Message + 
                    " - Did you click Receive on the other device?");
                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((int)fileStream.Length);
            baseStream.Write(length, 0, length.Length);

            // Create a buffer for reading the file.
            byte[] buffer = new byte[buffersize];

            // Display the number of bytes being sent.
            int fileLength = (int)fileStream.Length;
            statusBar1.Text = "Sending " + fileLength + " bytes";

            // Read the file stream into the base stream.
            while(fileLength > 0)
            {
                int numRead = fileStream.Read(buffer, 0, buffer.Length);
                baseStream.Write(buffer, 0, numRead);
                fileLength -= numRead;
            }

            fileStream.Close();
            baseStream.Close();
            irClient.Close();
            statusBar1.Text = "File sent";


        }

        // Receives a file.
        private void Receive_Click(object sender, System.EventArgs e)
        {
            // Create a stream for writing the file.
            Stream writeStream;
            try
            {
                writeStream = new FileStream(fileReceive,
                    FileMode.OpenOrCreate);
            }
            catch(Exception)
            {
                MessageBox.Show("Couldn't open "
                    + fileReceive + " for writing");
                return;
            }

            // Create a connection, with the IrDAEndPoint class,
            // for the selected device in the list box.
            // Start listening for incoming requests from
            // that device with an IrDAListener object.
            try
            {
                int i = listBox1.SelectedIndex;
                irEndP = new IrDAEndPoint(irDevices[i].DeviceID,
                    irServiceName);
                irListen = new IrDAListener(irEndP);
                irListen.Start();
            }
            catch(SocketException exSoc)
            {
                MessageBox.Show("Couldn't listen on service "
                    + irServiceName + ": "
                    + exSoc.ErrorCode);
            }

            // Show listening for selected device.
            statusBar1.Text = "Listening for "
                + listBox1.SelectedItem.ToString();

            // Create a client connection for the
            // service detected by the listener.
            IrDAClient irClient;
            try
            {
                irClient = irListen.AcceptIrDAClient();
            }
            catch(SocketException exp)
            {
                MessageBox.Show("Couldn't accept socket "
                    + exp.ErrorCode);
                return;
            }

            // Show whether a transfer from
            // the remote device is pending.
            if (irListen.Pending() == true)
                statusBar1.Text = "Pending from "
                    + irClient.RemoteMachineName;
            else
                statusBar1.Text = "Not pending from "
                    + irClient.RemoteMachineName;

            // Get the underlying stream of the client.
            Stream baseStream = irClient.GetStream();

            int numToRead;

            // Create a buffer for reading the file.
            byte[] buffer = new byte[buffersize];

            // Read the stream of data, which contains
            // the data from the remote device, until
            // there are no more bytes to read.
            numToRead = 4;
            while(numToRead > 0)
            {
                int numRead = baseStream.Read(buffer, 0, numToRead);
                numToRead -= numRead;
            }

            // Get the size of the buffer to show
            // the number of bytes to write to the file.
            numToRead = BitConverter.ToInt32(buffer, 0);
            statusBar1.Text = "Going to write "
                + numToRead + " bytes";

            // Write the stream to the file until
            // there are no more bytes to read.
            while(numToRead > 0)
            {
                int numRead = baseStream.Read(buffer, 0 , buffer.Length);
                numToRead -= numRead;
                writeStream.Write(buffer, 0, numRead);
            }

            // Show that the file was received.
            statusBar1.Text = "File received";

            baseStream.Close();
            writeStream.Close();
            irListen.Stop();
            irClient.Close();
        }
    }
}

Vererbungshierarchie

System.Object
   System.Net.EndPoint
    System.Net.Sockets.IrDAClient

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows CE, Windows Mobile für Pocket PC, Windows Mobile für Smartphone

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Compact Framework

Unterstützt in: 2.0, 1.0

Siehe auch

Referenz

IrDAClient-Member
System.Net.Sockets-Namespace

Weitere Ressourcen

Gewusst wie: Übertragen von Dateien über eine Infrarotverbindung