Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > TcpClient и TcpListener


Автор: sindi8 30.5.2006, 13:07
Добрый день.
Встала задача управлять программой с одного компа прогой на другом компе. Почитал форум, посмотрел кто что как делает - если правильно понял для этого нужно либо использовать сокеты, либо TcpClient и TcpListener (что внутри видимо тоже базируется на сокетах, но использование этих классов на первый взгляд проще). Посмотрел пример http://www.codeproject.com/csharp/mycodefaraz.asp, запихал на серверном приложении прослушивание в отдельный поток. Но при закрытии клиента на сервере выплевывается ошибка о том, что "Удаленный хост принудительно разорвал существующее подключение". Попробовал отлавливать эксепшн в IOException - все отрабатывает, но больше к среваку приконнектиться не получается (и ловится постоянно эксепшн). Сам я в этих вопросах новичек. Просветите, куда двигаться, пожалуйста. 

Автор: sindi8 30.5.2006, 13:49
Повторный коннект получился. В блоке catch закрыл сокет и заново его настроил на прослушивание. 

Автор: arilou 30.5.2006, 15:12
sindi8, ну и наверное счетчик ведешь, сколько раз попытался переконнектиться?  smile  

Автор: sindi8 30.5.2006, 15:30
Пока не совсем осознал, зачем мне счетчик, но взял на заметку  smile  

Автор: arilou 30.5.2006, 15:40
sindi8, ну чтобы в бесконечный цикл не ушло, если выдернуть сетевой кабель  smile  

Автор: sindi8 30.5.2006, 17:01
до бесконечных циклов еще не дошел, но странность уже какую-то заполучил (да простят меня модераторы и не сочтут что я задаю второй вопрос в одном топике). Почему-то серверная часть программы не убивается в памяти, если тип проекта Windows Application, и убивается без проблем, если тип Console Application... От чего бы это? 

Автор: arilou 30.5.2006, 17:07
Цитата(sindi8 @  30.5.2006,  17:01 Найти цитируемый пост)
Почему-то серверная часть программы не убивается в памяти

кем не убивается? ты имеешь ввиду "остается в памяти"? Для завершения Windows Application надо Application.Exit вызывать (как альтернативу закрытию основного окна). 

Автор: sindi8 1.6.2006, 12:27
arilou, именно - остается в памяти. И Application.Exit() почему-то не спасает... Консольное же упорноработает так как надо. Это конечно не смертельно (сейчас для моей задачи), но все-таки просто так висящее консольное окно как-то немного напрягает... 

Автор: arilou 1.6.2006, 12:39
sindi8, есть вероятность что у тебя остался работать какой-то поток. Для потоков, которые должны убиваться вместе с приложением, надо устанавливать св-во IsBackground = true. 

Автор: sindi8 1.6.2006, 13:02
!!!!!!!!!!! Спасибо! Именно в этом и была проблема! Хорошо когда есть люди с опытом, которые могут помочь))) 

Автор: arilou 3.6.2006, 10:33
sindi8, рад что смог помочь - приходи еще  smile  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)