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:
Erstellen Sie dieses Beispiel.
Erstellen Sie in dem Gerät, das zum Senden der Datei verwendet wird, im Ordner Eigene Dateien eine Textdatei mit dem Namen send.txt.
Richten Sie die Infrarotanschlüsse der Geräte aus.
Starten Sie die Anwendung IrDADemo.exe auf beiden Geräten.
Klicken Sie auf beiden Geräten auf die Schaltfläche Suchen, um eine Liste der verfügbaren Infrarotgeräte anzuzeigen.
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.
Klicken Sie auf dem Gerät, das die Datei sendet, auf die Schaltfläche Senden.
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