Export (0) Print
Expand All
1 out of 4 rated this helpful - Rate this topic

IrDAClient Class

Provides connection services for an infrared connection.

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

public class IrDAClient
public class IrDAClient
public class IrDAClient

Provides services for an infrared end point that includes making connections, obtaining data streams and discovering devices.

Because of protocol differences, you cannot interactively use the infrared Beam features on a Pocket PC with a .NET Compact Framework infrared application. Protocol differences also exist with the built-in infrared features on a laptop or desktop computer.

Infrared connections are made by specifying a service name, which can be any value provided the participating devices refer the same name.

TopicLocation
How to: Make an Infrared File Transfer.NET Compact Framework
How to: Make an Infrared File Transfer.NET Compact Framework
How to: Make an Infrared File Transfer.NET Compact Framework

This code example demonstrates how to send and receive files between devices using infrared communications. You need two Pocket PCs, one as the device to send the file and the other to receive it. To run this sample, do the following:

  1. Build this example.

  2. Create a text file named send.txt in the My Documents folder of the device that will send the file.

  3. Align the infrared ports of the devices.

  4. Start the application, IrDADemo.exe, on both devices.

  5. On both devices, click the Discover button for a list of infrared devices within range.

  6. On the device that will receive the file, select the device that will send the file, and then click the Receive button. This button must be clicked before clicking Send on the sending device.

  7. On the device that will send the file, click the Send button.

  8. The receiving device will receive the file, which will be saved to a file named receive.txt in the My Documents folder.

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();
        }
    }
}

System.Object
   System.Net.EndPoint
    System.Net.Sockets.IrDAClient
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Windows CE, Windows Mobile for Pocket PC, Windows Mobile for Smartphone

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see System Requirements.

.NET Compact Framework

Supported in: 2.0, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft. All rights reserved.