Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Работа с tcp в .Net Добавлено: 02.12.12 15:40  

Автор вопроса:  DrKillJoy
Доброго времени суток! Очень нужен совет знающих людей.

Есть у меня рабочий проект на VB6, в нем утроен обмен по TCP и протоколу ModBus, с внешним устройством. Теперь встала необходимость перенести это проект на .Net
Там на сколько я знаю, вместо WinSock используется System.Net.Sockets. Но я совсем не понимаю, как с ним работать...

Нашел в интернете пример (http://control.com/thread/1273242611), но он у меня зависает на строке (serverStream.Read(inStream, 0, CInt(clientSocket.ReceiveBufferSize)))
Очень бы хотелось услышать совет! Ну, а если примером поделитесь, то буду очень счастлив!

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #1 Добавлено: 17.12.12 07:40
Не говоря о том, что пример мягко говоря очень корявый...

Read выполняет синхронное чтение данных из потока (в данном случае из сетевого потока NetworkSteam). Если он зависает, значит в потоке никаких данных нет. Метод Read вернет результат либо когда в поток попадут какие-то данные, которые можно считать, либо при наступлении исключения (например, таймаута).

Ответить

Номер ответа: 2
Автор ответа:
 DrKillJoy



Вопросов: 10
Ответов: 18
 Профиль | | #2 Добавлено: 25.12.12 04:22
Спасибо за ответ!

Не говоря о том, что пример мягко говоря очень корявый...

Лучшее, что я смог найти на просторах интернета. Может есть и лучше, но я не знаю.

Спасибо за ответ, теперь понятно, из за чего происходит зависание...

Может посоветуете что-нибудь почитать, по ".Net.Sockets"? Буду рад любой инфе!

Ответить

Номер ответа: 3
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4243
 Web-сайт: all-oracle.ru
 Профиль | | #3
Добавлено: 25.12.12 21:37
Ищи примеры по TcpClient (их в инете как грязи) .. это обертка над сокетами... смотри,разбирайся, пробуй.. Что будет непонятно - спрашивай

Ответить

Номер ответа: 4
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #4 Добавлено: 26.12.12 04:57
ты на какой версии VB.NET сидишь? Если есть возможность использовать самую последнюю (2012), то там сделали просто очень вкусные фичи в том числе по работе с вводом выводом (и сетью в том числе)

Ответить

Номер ответа: 5
Автор ответа:
 andrey



ICQ: 305986093 

Вопросов: 3
Ответов: 41
 Профиль | | #5 Добавлено: 26.02.13 12:31
  1.  
  2. Dim client As New TcpClient
  3.  
  4. Private Sub Connect_Socket()
  5.         Try
  6.             client.Connect("192.168.255.10", "10002")
  7.           Catch ex As System.Net.Sockets.SocketException
  8.                 MsgBox("Ошибка при подключении")
  9.         End Try
  10.  
  11.     End Sub
  12.  
  13. Private Sub Button()
  14.   Dim bytes As Int32
  15.         Dim stream As NetworkStream = client.GetStream()
  16.  Dim data As [Byte]() = System.Text.Encoding.Default.GetBytes(Chr(&H01) + Chr(&H04) + Chr(&H00) + Chr(&H01) + Chr(&H00) + Chr(&H02) + Chr("&H" & crc1) + Chr("&H" & crc2))
  17.   stream.Write(data, 0, data.Length)
  18.             data = New [Byte](8) {}
  19.  Do While client.Available = 0 'количество полученных из сети и доступных для чтения данных
  20. 'в теле цикла поместить условие на превышение таймаута
  21. 'Если таймаут превышает к примеру 200-300 мил. секунд выходим из процедуры, можно сообщить, что какие то не лады.
  22.  Loop
  23.  bytes = stream.Read(data, 0, data.Length)
  24. 'далее обрабатываем массив байт
  25. End Sub



Так к примеру.
Artyom какие вкусности коснулись работы с COM портами?

Ответить

Номер ответа: 6
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6596
 Профиль | | #6 Добавлено: 02.03.13 01:58
andrey, ужасный код.
Этот цикл будет очень сильно нагружать процессор, впустую, учитывая что при работе с сетью большую часть времени выполняется ожидание данных.

Метод Stream.Read синхронный, и в том случае, если в потоке нет данных, выполнение кода и так приостановится до того как данные появятся или сработает таймаут

Я не вижу чего-то нового для работы с COM портами

Ответить

Страница: 1 |

Поиск по форуму





© Copyright 2002-2011 VBNet.RU | Пишите нам