Socket

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Kalan
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 20.02.2004 (Пт) 17:04
Откуда: Москва

Socket

Сообщение Kalan » 20.02.2004 (Пт) 19:19

Как узнать что связь прервалась? B Winsock вызывался метод close, а в NET, знаю poll есть, но он еще в куче случаев передает true, а нет ли аналога close в NETe как в winsock?

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 24.02.2004 (Вт) 16:04

столкнулся с похожей ситуацией.
если где найдёшь, кинь сюда плз.
и между ног затеплилась надежда
(%

http://grunger.net.ru

Kurt
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 105
Зарегистрирован: 05.01.2003 (Вс) 23:25

Сообщение Kurt » 25.02.2004 (Ср) 3:51

Может, попробовать обработчик события навесить?
Не поможет?
Для корабля, который не знает куда плыть, нет попутного ветра...

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 25.02.2004 (Ср) 14:51

обработчик какого события?
и между ног затеплилась надежда
(%

http://grunger.net.ru

Kalan
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 20.02.2004 (Пт) 17:04
Откуда: Москва

Сообщение Kalan » 28.02.2004 (Сб) 13:46

Я тоже не понял причем здесь навесить обработчик события, но я так подумал, дело в том что метод connected сокета обновляется только при новой операции, может просто после каждой операции проверять ето свойство... но вот интересно не вызовет ли ошибку то, что мы будем обращаться к закрытому сокету, хотя в принципе, можно просто обработать эту ошибку, она ведь не должна быть критической

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 28.02.2004 (Сб) 14:28

Ребята, Вы не там копаете. Socket используется во всех подключениях в том числе и UDP, Вам надо искать объекты "про TCP"

Я сам не знаю, но попробуйте покапать TCPClient или TCPListener, хотя могу ошибаться...
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 28.02.2004 (Сб) 14:43

Ого! покопал, - крепитесь парни! Если лень мозгами думать юзайте ax.

Тут совсем другая концепция!

TCPClient и TCPListener общаются на уровне потоков (NetworkStream) , как я понял, отключение опознаётся по концу потока!

Фишка в том, что теперь Вас это не должно парить.Всё за Вас сделает среда. Это гораздо удобнее, но надо перестоить мозги.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 29.02.2004 (Вс) 0:10

ага
stream.readtoend
а пронотифаить сервер о потере соединения?
или других юзеров? мм.. что-то как-то заморачивацца с окончанием работы стрима как-то криво.

что нам предлагает microsoft /перекрестился
в 101 vb.net samples всё на TCPClient и TCPListener
причём прога с багами %)~ надо порыть мсдн на тему сокетов.
например, если юзать классы оттуда неизменяя ничего, при отконекчивании юзера streamreader начинает плевацца " " %)
и я парсил окончание соединения на пробел в стримридере. криво конечно, но работало.

правда соединялся телнетом на локалхост.

хотя, может у меня и руки кривые. я не ж непрограммист.
и между ног затеплилась надежда
(%

http://grunger.net.ru

Kalan
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 20.02.2004 (Пт) 17:04
Откуда: Москва

Сообщение Kalan » 02.03.2004 (Вт) 11:10

Ладно, я тут короче попробовал, можно сделать так: вызвать у сокета метод recieve(ну или beginrecieve) и если он ( или endrecieve) вернет 0-значит связь прервалась(с recieve не пробовал, а вот с endrecieve получается точно)

PS. Я знаю, что мне нужен TCP, у датаграм вообще соединения нет, с ними все просто бери и считывай из буфера сокета!

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 02.03.2004 (Вт) 22:52

как-то не воодушевляет
событие нужно
и между ног затеплилась надежда
(%

http://grunger.net.ru

Kalan
Новичок
Новичок
 
Сообщения: 47
Зарегистрирован: 20.02.2004 (Пт) 17:04
Откуда: Москва

Сообщение Kalan » 04.03.2004 (Чт) 12:10

Ну а событие можно навесить:

x=endrecieve(ar)
if x=0 then raiseevent onConnectionClose() :lol:

Грандж
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 150
Зарегистрирован: 29.10.2002 (Вт) 14:10
Откуда: Москва

Сообщение Грандж » 04.03.2004 (Чт) 14:28

а значение переменной проверять в бесконечном цикле?
в принципе можно.

удивительно, что в самом классе это не предусмотренно %(
и между ног затеплилась надежда
(%

http://grunger.net.ru

Kulip@tor
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 70
Зарегистрирован: 16.09.2004 (Чт) 20:15
Откуда: Israel

Сообщение Kulip@tor » 26.11.2004 (Пт) 18:56

глюк какой-то. Если закрыть подключение к нету то не фига не работает. ПОЧЕМУ?Я идиот! Убейте меня, кто-нибудь!???? :shock:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.04.2005 (Вс) 2:06

И тут тоже ап.

Конец потока - это не "сервер вырубился", это "сервер молчит". Как же узнать, что сервер вырубился? Протокол TCP это позволяет, а вот класс TCPClient - почему-то нет :-(
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.04.2005 (Вс) 4:29

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 24.04.2005 (Вс) 4:46

Не. (работаю синхронно)
Если переделывать все на асинхронную работу, тогда может и сканает, но нельзя ли без этого?
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 24.04.2005 (Вс) 4:57

Там, собсно, главное
I found one interesting bug with the NetworkStream object. When the server disconnects from your connection, I would expect that the underlying socket would raise an error. It does not. What happens is that the asynchronous call back goes into a tight loop and uses up all of the processor time. Check the byte count to trap this problem. If the number of bytes read from the socket is zero, then close your TCP connection. I have tried using the State object to check for socket problems, but it does not appear to be implemented as of yet. The TCPClient object does not have public properties or methods to determine the connection state either.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Dmitriy Solomnikov
Постоялец
Постоялец
 
Сообщения: 407
Зарегистрирован: 10.11.2004 (Ср) 13:04
Откуда: Москва

Сообщение Dmitriy Solomnikov » 06.05.2005 (Пт) 16:42

Народ, сталкнулся с этой же проблемой. Если кто что придумал, поделитесь плз идеями.

temur
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 160
Зарегистрирован: 24.02.2005 (Чт) 21:17
Откуда: Georgia

Сообщение temur » 11.05.2005 (Ср) 12:27

Посмотрите пример, может поможет...
http://www.tb.nm.ru/Sockets.rar
Правда там нет контроля закрытия соединения....
Я посылал тестовые сообщения, если соединеие закрыто или сервер не доступен то генерируется исключение....


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 52

    TopList