Tcpclient не ждет поступления данных перед завершением работы
Ладно, значит, я не эксперт и даже близко к этому не подхожу. Я пишу на VB как хобби и написал множество небольших приложений, и большинство из них предназначены для старых последовательных подключений устройств.
Теперь эти устройства подключаются через TCP. Просто, мне так показалось...
Мой сервер представляет собой встроенный SBC и очень структурирован в своем коммуникационном протоколе. Все данные заканчиваются фиксированным символом ETX (ChrW(3)). Таким образом, я должен быть в состоянии получить входящий поток ответов и сохранить его в строку до тех пор, пока не прибудет ETX.
Это также является одним нажатием кнопки, подключения-передача-получать суб.
Наличие отдельной кнопки подключения/отключения было бы полезно, Так как иногда посылается несколько команд, а многократное подключение/отключение кажется смешным.
Любая помощь была бы очень кстати.
Кевин
Shared Sub Connect(server As [String], port as [Int32], message As [String]) Try Dim client As New TcpClient(server, port) Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message) Dim stream As NetworkStream = client.GetStream() stream.Write(data, 0, data.Length) RTB1_update("Sent: {0}", message) data = New [Byte](256) {} Dim responseData As [String] = [String].Empty Threading.thread.sleep(2000) Dim bytes As Int32 = stream.Read(data, 0, data.Length) responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes) RTB1_update("Received: {0}", responseData) stream.Close() client.Close() Catch e As ArgumentNullException RTB1_update("ArgumentNullException: {0}", e) Catch e As SocketException RTB1_update("SocketException: {0}", e) End Try End Sub
Что я уже пробовал:
Независимо от того, что я делаю, он не может этого сделать, и ожидание тайм-аута около 90 секунд-это шутка. Приведенный ниже код прямо из MSDN и завершается задолго до того, как данные даже поступают. Добавление thread.sleep на секунду или две помогает, Но некоторые данные длинные и обрезаются, некоторые очень короткие, и долгое ненужное ожидание глупо,