Передача данных
Передача данных
Код для отправки и посылки файлов приведен в листинге 12.5.
Листинг 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);
}
// Показываем прослушивание выбранного устройства
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. Но можно было обойтись и без создания текстовых файлов, а просто считывать данные из потока. В этом случае наша программа приобрела бы черты чата. Также можно написать какую-нибудь игру, в которой участвуют два игрока. С помощью инфракрасной связи вы можете передавать информацию, например, о сделанном ходе в шахматах.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Передача и обработка данных в html-файле
Передача и обработка данных в html-файле Передача данных в html-файл:Передачу данных в html-файл можно произвести через URL-адрес. После адреса ставиться знак вопроса и после него параметр, который Вы хотите передать. Если этих параметров несколько, то между ними ставиться
fscommand - Передача данных браузеру
fscommand - Передача данных браузеру fscommand(Глобальная функция)Позволяет отправить данные программе, которая запустила данный клипСинтаксис:fscommand(command, arguments)Аргументы:Описание:С помощью функции fscommand(), фильм Flash может связываться с автономным проигрывателем или
fscommand - Передача данных браузеру
fscommand - Передача данных браузеру fscommand(Глобальная функция)Позволяет отправить данные программе, которая запустила данный клипСинтаксис:fscommand(command, arguments)Аргументы:Описание:С помощью функции fscommand(), фильм Flash может связываться с автономным проигрывателем или
Передача данных
Передача данных Как уже обсуждалось, передача данных в потоке происходит в виде сообщений. Процесс инициирует передачу данных с помощью системных вызовов write(2) и putmsg(2), которые непосредственно взаимодействуют с головным модулем. Головной модуль формирует сообщение,
Передача данных
Передача данных После создания виртуального канала взаимодействующие процессы получают возможность обмениваться данными в дуплексном режиме.Хотя фактически передача данных осуществляется в виде сегментов, ее логический вид представляет собой последовательный поток
5.3.8. Защищенная передача данных
5.3.8. Защищенная передача данных В состав пакета SSH входят еще две полезные программы — это sftp-server (FTP-сервер с поддержкой шифрования передаваемых данных) и sftp (FTP-клиент для подключения к SFTP-серверу). Давайте посмотрим на последнюю строку файла конфигурации SSH-сервера
2.1.9. Передача данных при использовании UDP
2.1.9. Передача данных при использовании UDP Мы наконец-то добрались до изучения того, ради чего сокеты и создавались: как передавать и получать с их помощью данные. По традиции начнем рассмотрение с более простого протокола UDP. Функции, которые рассматриваются в этом разделе,
2.1.11. Передача данных при использовании TCP
2.1.11. Передача данных при использовании TCP При программировании TCP и UDP применяются одни и те же функции, но их поведение при этом различно. Для передачи данных с помощью TCP необходимо сначала установить соединение, и после этого возможен обмен данными только с тем адресом, с
Урок № 67. Передача собственных материалов в переработку на сторону и передача продукции из давальческого сырья
Урок № 67. Передача собственных материалов в переработку на сторону и передача продукции из давальческого сырья В процессе производственной деятельности предприятия часто приходится осуществлять передачу собственных материалов стороннему переработчику для выпуска
Передача и получение пользовательских данных состояния
Передача и получение пользовательских данных состояния Заключительным аспектом нашего рассмотрения асинхронных делегатов будет обсуждение последнего из аргументов метода BeginInvoke() (этот аргумент у нас до сих пор был равен null). С помощью этого параметра можно передать в
6.2. Передача данных с одного экрана на другой
6.2. Передача данных с одного экрана на другой Постановка задачи Необходимо передавать данные из одной сцены в другую, используя
8.12. Функция sendfile(): быстрая передача данных
8.12. Функция sendfile(): быстрая передача данных Функция sendfile() — это эффективный механизм копирования данных из одного файлового дескриптора в другой. Дескрипторам могут соответствовать дисковые файлы, сокеты или устройства.Обычно цикл копирования реализуется следующим
Передача данных
Передача данных Код для отправки и посылки файлов приведен в листинге 12.5.Листинг 12.5private void butSend_Click(object sender, EventArgs e) { // Открываем файл для отправки и получаем его поток Stream fileStream; try { fileStream = new FileStream(fileSend, FileMode.Open); } catch (Exception exFile) { MessageBox.Show("Не могу открыть " + exFile.ToString());
Интерфейсы и передача пакетов данных
Интерфейсы и передача пакетов данных Перед запуском системы в нее необходимо загрузить огромные объемы данных. В системе R/3 4.0 для этого предусмотрена утилита, которая называется «Инструментальные средства для миграции прежней системы» (Legacy System Migration Workbench, LSMW). Принцип