Страница: 1 | 
		
		 
			   
			 
			 
			 
			 Страница: 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
Ответов: 6602
      
 Профиль |  | #1
       
Добавлено:  17.12.12 07:40
       
    
       
  
Не говоря о том, что пример мягко говоря очень корявый...
 
    
Read выполняет синхронное чтение данных из потока (в данном случае из сетевого потока NetworkSteam). Если он зависает, значит в потоке никаких данных нет. Метод Read вернет результат либо когда в поток попадут какие-то данные, которые можно считать, либо при наступлении исключения (например, таймаута).
		
	  
			 
	
		 
    
       
    
Номер ответа: 2 
      
Автор ответа:
 DrKillJoy
![]()
![]()
Вопросов: 10
Ответов: 18
      
 Профиль |  | #2
       
Добавлено:  25.12.12 04:22
       
    
       
  
Спасибо за ответ!
 
    
Лучшее, что я смог найти на просторах интернета. Может есть и лучше, но я не знаю.
Спасибо за ответ, теперь понятно, из за чего происходит зависание...
Может посоветуете что-нибудь почитать, по ".Net.Sockets"? Буду рад любой инфе!
		
	  
			 
	
		 
    
       
    
Номер ответа: 3 
      
Автор ответа:
 EROS
![]()
![]()
![]()
![]()
Вопросов: 58
Ответов: 4255
 Профиль |  | #3
       
Добавлено:  25.12.12 21:37
       
    
       
  
Ищи примеры по TcpClient (их в инете как грязи) .. это обертка над сокетами... смотри,разбирайся, пробуй.. Что будет непонятно - спрашивай
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 4 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #4
       
Добавлено:  26.12.12 04:57
       
    
       
  
ты на какой версии VB.NET сидишь? Если есть возможность использовать самую последнюю (2012), то там сделали просто очень вкусные фичи в том числе по работе с вводом выводом (и сетью в том числе)
 
    
		
	  
			 
	
		 
    
       
    
Номер ответа: 5 
      
Автор ответа:
 andrey
![]()
![]()
![]()
![]()
ICQ: 305986093 
Вопросов: 3
Ответов: 41
      
 Профиль |  | #5
       
Добавлено:  26.02.13 12:31
       
    
       
  
 
    
Так к примеру.
Artyom какие вкусности коснулись работы с COM портами?
		
	  
			 
	
		 
    
       
    
Номер ответа: 6 
      
Автор ответа:
 Artyom
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Разработчик
Вопросов: 130
Ответов: 6602
      
 Профиль |  | #6
       
Добавлено:  02.03.13 01:58
       
    
       
  
andrey, ужасный код.
 
    
Этот цикл будет очень сильно нагружать процессор, впустую, учитывая что при работе с сетью большую часть времени выполняется ожидание данных.
Метод Stream.Read синхронный, и в том случае, если в потоке нет данных, выполнение кода и так приостановится до того как данные появятся или сработает таймаут
Я не вижу чего-то нового для работы с COM портами