System.Net.IrDA.dll
. Таким образом, при использовании класса IrDAClient
необходимо добавить в проект ссылку на указанную библиотеку.
Для чтения и передачи данных используется метод GetStream
, работающий с основным потоком данных. Компьютер-клиент должен знать имя устройства, с которым нужно установить связь. Программа может поочередно опросить все доступные устройства и выбрать нужное устройство для связи. Алгоритм подключения устройства к инфракрасному порту другого устройства приведен далее.
1. Создать новый экземпляр класса IrDAClient
.
2. Получить список доступных устройств с помощью метода IrDAClient.DiscoverDevices
. Можно ограничить количество опрашиваемых устройств при помощи параметра maxDevices
. Метод DiscoverDevices
возвращает массив объектов IrDADeviceInfo
.
3. Нужно исследовать каждый объект IrDADeviceInfo
из полученного массива, чтобы найти необходимое устройство для связи.
4. Если подобное устройство найдено, то при помощи метода IrDAClient.Connect
производится соединение. При этом необходимо указать имя службы
Создание программы для работы с ИК-связью
В этом разделе будет создано приложение, которое будет соединяться с другим устройством и пересылать ему текстовый файл. Прежде всего нужно создать новый проект IrDA_CS
. На форме надо разместить три кнопки, список и строку состояния.
Кнопка butFindDevs
предназначена для поиска устройств, кнопка butSend
— для отправки текстового сообщения, а кнопка butReceive
служит для приема сообщения. В списке listBox1
будет отображаться информация об обнаруженных устройствах, а в строке состояния будут отображаться сообщения о производимых операциях. Для передачи данных и работы с файлами нам необходимо импортировать несколько пространств имен, как это показано в листинге 12.1.
Imports System.Net
Imports System.IO
Imports System.Net.Sockets
Для работы с инфракрасной связью необходимо подключить к проекту класс IrDAClient
. Для этого выполним команду меню Project►Add Reference
и в диалоговом окне выберем пункт System.Net.IrDa
.
Теперь нужно объявить переменные на уровне класса, как показано в листинге 12.2
private IrDAListener irListen;
private IrDAClient irClient;
private IrDAEndPoint irEndP;
private IrDADeviceInfo[] irDevices;
string fileSend;
string fileReceive;
string irServiceName;
int buffersize;
В конструкторе формы надо создать экземпляр класса IrDAClient
, задать имена файлов для приема и отправки сообщения, указать имя службы, установить размер буфера для передаваемого файла и также временно сделать недоступными кнопки для отправки и посылки сообщения. Соответствующий код приведен в листинге 12.3.
public Form1() {
InitializeComponent();
irClient = new IrDAClient();
// Файлы, предназначенные для отправки и приема
fileSend = '.\My Documents\send.txt';
fileReceive = '.\My Documents\receive.txt';
// Задаем имя для службы IrDA
// Это может быть любое слово
// Другие устройства для примера должны использовать это же
// слово
irServiceName = 'IrDAFtp';
// Устанавливаем максимальный размер буфера для передаваемого
// файла
buffersize = 256;
// Делаем недоступными кнопки отправки и посылки сообщений
// до тех пор, пока не будут обнаружены устройства
butSend.Enabled = false;
butReceive.Enabled = false;
}
Обнаружение устройств
Теперь надо написать код для кнопки butFindDevs
, предназначенной для обнаружения устройств. При тестировании примера необходимо направить инфракрасные порты устройств друг на друга. Код, ответственный за выполнение этой задачи, приведен в листинге 12.4.
private void butFindDevs_Click(object sender, EventArgs e) {
// Ищем доступные устройства с инфракрасной связью
// и помещаем их в список
// Поиск не более трех доступных устройств
irDevices = irClient.DiscoverDevices(2);
// Если устройства не найдены, то выводим сообщение
if (irDevices.Length == 0) {
MessageBox.Show('Устройства с ИК-портами не обнаружены!');
return;
}
// Перечисляем массив IrDADeviceInfo
// и выводим информацию о каждом устройстве в список