Программирование КПК и смартфонов на .NET Compact Framework
Шрифт:
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);
}
// Показываем прослушивание выбранного устройства
statusBar1.Text = "Прослушка " + listBox1.SelectedItem.ToString;
// Создаем соединение
// для службы, обнаруженной прослушкой
IrDAClient irClient;
try {
irClient = irListen.AcceptIrDAClient;
} catch (SocketException exp) {
MessageBox.Show("Не могу принять сокет "+ exp.ErrorCode);
return;
}
// Показываем, идет ли передача файла
if (irListen.Pending == true)
statusBar1.Text = "Передача из " + irClient.RemoteMachineName;
else
statusBar1.Text = "Нет передачи из " + irClient.RemoteMachineName;
// Получим поток из клиента
Stream baseStream = irClient.GetStream;
int numToRead;
// Создаем буфер для чтения файла
byte[] buffer = new byte[buffersize];
// Читаем поток данных, который содержит
// данные из передающего устройства
numToRead = 4;
while (numToRead > 0) {
int numRead = baseStream.Read(buffer, 0, numToRead);
numToRead -= numRead;
}
//
Получим размер буфера для показа
// числа байт для записи в файл
numToRead = BitConverter.ToInt32(buffer, 0);
statusBar1.Text = "Записываем "+ numToRead + " байт";
// Записываем поток в файл до тех пор,
// пока не будут прочитаны все байты
while (numToRead > 0) {
int numRead = baseStream.Read(buffer, 0, buffer.Length);
numToRead -= numRead;
writeStream.Write(buffer, 0, numRead);
}
// Сообщаем, что файл получен
statusBar1.Text = "Файл получен";
baseStream.Close;
writeStream.Close;
irListen.Stop;
irClient.Close;
}
Итак, можно запустить приложение на двух устройствах и попробовать отправить и принять файл. Перед тестированием программы нужно создать текстовый документ
send.txt
с любым содержанием. Затем нужно повернуть друг к другу инфракрасные датчики двух устройств и на первом устройстве нажать кнопку Искать
. Если поиск завершился успешно, то в списке отобразится имя второго устройства. Затем на втором устройстве надо нажать кнопку
Принять
, а на первом устройстве нажать кнопку Отправить
. В результате ваших действий текст сообщения из файла send.txt
должен быть передан на другое устройство и сохранен в файле receive.txt
. К сожалению, данный пример нельзя тестировать на эмуляторе. Для проведения эксперимента вам необходимо иметь два настоящих устройства. Так как у меня нет второго КПК, я решил воспользоваться в качестве второго устройства своим смартфоном под управлением Windows Mobile 2005. Поскольку графический интерфейс программ для смартфонов не поддерживает кнопки, мне пришлось добавить в решение новый проект
IrDA_Smartphone_CS
и частично переписать код программы. Вместо кнопок использовалось меню, а вместо элемента управления
ListBox
— элемент ComboBox
. Но можно было обойтись и без создания текстовых файлов, а просто считывать данные из потока. В этом случае наша программа приобрела бы черты чата. Также можно написать какую-нибудь игру, в которой участвуют два игрока. С помощью инфракрасной связи вы можете передавать информацию, например, о сделанном ходе в шахматах. Технология Bluetooth
Поделиться:
Популярные книги
Эпоха Опустошителя. Том I
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Проблема майора Багирова
1. Спецназ
Любовные романы:
современные любовные романы
6.60
рейтинг книги
Законы Рода. Том 13
13. Граф Берестьев
Фантастика:
аниме
фэнтези
5.00
рейтинг книги
Газлайтер. Том 15
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
О, Путник!
1. Квинтет. Миры
Фантастика:
социально-философская фантастика
5.00
рейтинг книги
Прометей: каменный век
1. Прометей
Фантастика:
альтернативная история
6.82
рейтинг книги
Её (мой) ребенок
Любовные романы:
современные любовные романы
6.91
рейтинг книги
Идеальный мир для Лекаря 8
8. Лекарь
Фантастика:
юмористическое фэнтези
аниме
7.00
рейтинг книги
Прометей: каменный век II
2. Прометей
Фантастика:
альтернативная история
7.40
рейтинг книги
Цвет сверхдержавы - красный. Трилогия
Цвет сверхдержавы - красный
Фантастика:
попаданцы
альтернативная история
8.06
рейтинг книги
Болтливый мертвец
7. Лабиринты Ехо
Фантастика:
фэнтези
9.41
рейтинг книги
На границе империй. Том 9. Часть 2
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Истребители. Трилогия
Фантастика:
альтернативная история
7.30
рейтинг книги
Лишняя дочь
Любовные романы:
любовно-фантастические романы
8.22