> End If
> '==========================================
> 'ПЕРЕДАТЬ ДАННЫЕ!
> '==========================================
> 'Открыть файл, который мы хотим передать
> 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)
> 'Обеспечить многопоточную безопасность для предотвращения