Я выполнил большой объем поиска, и я уверен, что я рядом, но у меня проблемы и надеюсь, что кто-то может помочь.Прочтите ASync Network Stream
У меня есть сканер штрих-кода в сети Ethernet, который мне нужно постоянно слушать. Я пробовал использовать NetworkStream
. Читайте в отдельном потоке, но затем обнаружил, что есть функция «BeginRead
» для сетевых потоков async. Проблема в том, что я не могу заставить ее работать вообще.
Вот код, который я получил:
Public Class ScannerConnect
Private client As TcpClient
Property server As String
Property port As Int32 = 2005
Private data As [Byte]()
Sub Connect()
Try
client = New TcpClient(server, port)
Catch e As ArgumentNullException
Console.WriteLine("ArgumentNullException: {0}", e)
Catch e As SocketException
Console.WriteLine("SocketException: {0}", e)
End Try
End Sub 'Connect
Sub ListenASync()
stream = client.GetStream()
data = New [Byte](256) {}
stream.BeginRead(data, 0, data.Length, AddressOf ReadASync, stream)
End Sub
Private Sub ReadASync(ar As IAsyncResult)
Dim buffer As Byte() = TryCast(ar.AsyncState, Byte())
Dim bytesRead As Integer = stream.EndRead(ar)
Dim message As String = Encoding.ASCII.GetString(buffer, 0, bytesRead)
MsgBox(message)
stream.BeginRead(buffer, 0, buffer.Length, AddressOf ReadASync, buffer)
End Sub
End Class
Он падает на Dim сообщение Как String = Encoding.ASCII.GetString(buffer, 0, bytesRead)
с ошибкой Array
не может быть null
.
Любые идеи, что я делаю неправильно?
Если TryCast терпит неудачу, не будет 'Byte' быть пустым/пустым, и, поскольку вы не проверяете его, вы получаете ошибку – Plutonix