> 'Открыть файл, который мы хотим передать
> streamInFromFile = System.IO.File.OpenRead(m_fileToSend)
> 'Открыть сокет IrDA, которому мы хотим передать данные
> streamOutToIrDA = irDASender.GetStream()
> Const BUFFER_SIZE As Integer = 1024
> Dim inBuffer() As Byte
> ReDim inBuffer(BUFFER_SIZE)
> Dim bytesRead As Integer
> Dim iTestAll As Integer
> Dim iTestWrite As Integer
> ' Цикл...
> Do
> 'Считать байты из файла
> bytesRead = streamInFromFile.Read(inBuffer, 0, BUFFER_SIZE)
> iTestAll = iTestAll + 1
> 'Записать байты в наш выходной поток
> If (bytesRead > 0) Then
> streamOutToIrDA.Write(inBuffer, 0, bytesRead)
> iTestWrite = iTestWrite + 1
> End If
> Loop While (bytesRead > 0)
> 'Сбросить выходной поток
> streamOutToIrDA.Flush() 'Закончить запись любых данных
> streamOutToIrDA.Close() 'Закрыть поток
> streamOutToIrDA = Nothing
> 'Освободить локальный файл
> streamInFromFile.Close()
> streamOutToIrDA = Nothing
> 'Освободить порт IrDA
> irDASender.Close()
> irDASender = Nothing
> 'Успешное завершение!!!
> Return True
>End Function
>End Class
Листинг 15.5. Класс IrDAFileReceive
>'-------------------------------------------------------------------
>'Обеспечивает прием файла через IrDA (инфракрасный порт)
>'Этот класс НЕ является реентерабельным и не должен вызываться более
>'чем одной функцией за один раз. Если необходимо иметь несколько
>'сеансов связи через IR, это необходимо делать путем создания
>'нескольких различных экземпляров данного класса.
>'--------------------------------------------------------------------
>Public Class IrDAFileReceive
>Private m_wasListenerStopped As Boolean
>Private m_IrDAServiceName As String
>Private m_fileNameForDownload As String
>Private m_errorDurmgTransfer As String
>Private m_irListener As System.Net.Sockets.IrDAListener
>Private m ReceiveStatus As ReceiveStatus
>Public ReadOnly Property ErrorText() As String
> Get
> Return m_errorDuringTransfer
> End Get
>End Property
>'--------------------------
>'Различные состояния приема
>'--------------------------
>Public Enum ReceiveStatus
> NotDone_SettingUp
> NotDone_WaitingForSender
> NotDone_Receiving
> Done_Success
> Done_Aborted
> Done_ErrorOccured
>End Enum
>'------------------------------
>' Возвращает состояние передачи
>'------------------------------
>Public ReadOnly Property Status() As ReceiveStatus
> Get
> SyncLock (Me)
> Return m_ReceiveStatus
> End SyncLock
> End Get
>End Property
>Private Sub setStatus(ByVal newStatus As ReceiveStatus)
> 'Обеспечить многопоточную безопасность для предотвращения
> 'параллельного выполнения операций чтения/записи
> SyncLock (Me)
> m_ReceiveStatus = newStatus
> End SyncLock 'end lock
>End Sub
>'--------------------------------------------------
>' (in) filename: желаемое имя для входного файла IR
>'--------------------------------------------------
>Public Sub New(ByVal filename As String, ByVal irdaServiceName As String)
> 'Имя сокета IrDA, который мы хотим открыть
> m_IrDAServiceName = irdaServiceName
> 'Имя файла, в котором мы хотим сохранить полученные данные
> m_fileNameForDownload = filename
>End Sub
>'----------------------------------------------------------
>'Обеспечивает асинхронный прием файла через IR
>' (in) filename: имя файла, в который осуществляется запись
>'----------------------------------------------------------
>Public Sub WaitForIRFileDownloadAsync()
> 'Заметьте, что сейчас мы находимся в режиме подготовки
> setStatus(ReceiveStatus.NotDone_SettingUp)
> '-------------------
> 'Создать новый поток
> '-------------------
> Dim threadEntryPoint As System.Threading.ThreadStart
> threadEntryPoint = _
> New System.Threading.ThreadStart(AddressOf WaitForIRFileDownload)
> Dim newThread As System.Threading.Thread = _
> New System.Threading.Thread(threadEntryPoint)
> 'Запустить поток на выполнение
> newThread.Start()
>End Sub
>'------------------------------------------
>'Открывает порт IR и ожидает загрузки файла
>'------------------------------------------
>Public Sub WaitForIRFileDownload()
> Dim outputStream As System.IO.Stream
> Dim irdaClient As System.Net.Sockets.IrDAClient
> Dim irStreamIn As System.IO.Stream
> Try
> '=========================================================
> 'Задать и загрузить файл!