ID.ToString() + " " + irDevice.DeviceName + " " + irDevice.CharacterSet +
" " + irDevice.Hints;
listBox1.Items.Add(device);
}
listBox1.SelectedIndex = 0;
if (irDevices.Length > 0)
statusBar1.Text = irDevices.Length.ToString() + " устройств(а)";
// Делаем доступными кнопки для отправки и посылки сообщения
butSend.Enabled = true;
butReceive.Enabled = true;
}
Передача данных
Код для отправки и посылки файлов приведен в листинге 12.5.
private void butSend_Click(object sender, EventArgs e) {
// Открываем файл для отправки и получаем его поток
Stream fileStream;
try {
fileStream = new FileStream(fileSend, FileMode.Open);
} catch (Exception exFile) {
MessageBox.Show("Не могу открыть " + exFile.ToString());
return;
}
// Создаем IrDA-клиент с установленным именем службы.
// которое должно совпадать с именем службы на другом
// IrDA-клиенте
try {
irClient = new IrDAClient(irServiceName);
} catch (SocketException exS) {
MessageBox.Show("Ошибка сокета: " + exS.Message +
" - Вы щелкнули на кнопке Получить на другом устройстве?");
return;
}
// Получим поток
Stream baseStream = irClient.GetStream();
// Получим размер отправляемого файла
// и запишем это значение в поток
byte[] length = BitConverter.GetBytes((int)fileStream.Length);
baseStream.Write(length, 0, length.Length);
// Создаем буфер для чтения файла
byte[] buffer = new byte[buffersize];
// Показываем число отправленных байт
int fileLength = (int)fileStream.Length;
statusBar1.Text = "Отправлено " + fileLength + " байт";
// Читаем файловый поток в базовом потоке
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 = "Файл отправлен";
}
private void butReceive_Click(object sender, EventArgs e) {
// Создаем поток для записи файла
Stream writeStream;
try {
writeStream = new FileStream(fileReceive, FileMode.OpenOrCreate);
} catch (Exception) {
MessageBox.Show("Не могу открыть "+ fileReceive + " для записи");
return;
}
// Создаем соединение с помощью класса IrDAEndPoint
// для выбранного устройства из списка
// Начинаем прослушку входящих сообщений
// из устройства с объектом IrDAListener
try {
int i = listBox1.SelectedIndex;
irEndP = new IrDAEndPoint(irDevices[i].DeviceID, irServiceName);
irListen = new IrDAListener(irEndP);
irListen.Start();
} catch (SocketException exSoc) {
MessageBox.Show("Не могу прослушивать на службе " + irServiceName + ": " +
exSoc.ErrorCode);
}
// Показываем прослушивание выбранного устройства