Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
13 / 13 / 1
Регистрация: 24.11.2014
Сообщений: 94

TCP-клиент зависает, стоит серверу отключиться

23.06.2015, 13:13. Показов 1846. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал простейший TCP-клиент для приема / отправки сообщений. В общем практически все настроил как надо. Пока не разобрался со следующей бякой. Если рвется соединение с сервером (банально, упал или пропал интернет-коннект), то клиент зависает (картинка ниже) Проблема подозреваю в коде, слушающем Socket.

C#
1
2
3
4
5
6
7
8
9
10
11
12
 void SocketListening()
        {
            while (Messages.Connected)
            {
                    byte[] ID = new byte[4096];
                    int IDL = Messages.Receive(ID);
                    ID_Count += IDL;
                    String IncCom = Encoding.Default.GetString(ID, 0, IDL);
                    RTB_Inc("Сервер: " + IncCom + "\n");
                    toolStripStatusLabel3.Text = "П: " + ID_Count + " Байт";
             }
        }
Но что-то пока не представляю как его модифицировать, чтобы "вылечить" этот баг. Можете подсказать малость?
Миниатюры
TCP-клиент зависает, стоит серверу отключиться  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.06.2015, 13:13
Ответы с готовыми решениями:

Сцена зависает при запуске TCP-клиента, когда он подключен к TCP - серверу, при этом TCP-клиент полностью функционирует
Проблема описана в заголовке, и хотелось бы услышать ваше мнение, о том как можно решить проблему. Скрипт TCP-клиента на сцене: ...

Клиент-программа не подключается к TCP серверу даже по локальному IP
Помогите, пожалуйста! Написал обычный клиент-сервер. Код клиента: #pragma comment(lib,"Ws2_32.lib") #include...

Передача больших файлов tcp. Клиент зависает
Здравствуйте, мне нужно было написать два приложения клиент (c#) и сервер(c++ под linux) и организовать передачу файлов между ними. ...

9
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
23.06.2015, 13:32
Жесть. Насилие над сокетом в особо изощрённой форме. Читай MSDN внимательно:
Если отсутствуют данные, доступные для чтения, метод Receive будет выполнять блокирование до тех пор, пока не станут доступны данные, если не было установлено значение тайм-аута путем использования объекта Socket.ReceiveTimeout. Если значение тайм-аута было превышено, объект Receive выдаст исключение SocketException. Если используется неблокирующий режим и отсутствуют данные в стековом буфере протокола, метод Receive немедленно завершится и создаст исключение SocketException. Чтобы определить наличие данных, доступных для чтения, можно использовать свойство Available. Когда значение свойства Available не равно нулю, повторите операцию приема.
И вообще, уходи от синхронных методов к асинхронным.
0
13 / 13 / 1
Регистрация: 24.11.2014
Сообщений: 94
23.06.2015, 13:39  [ТС]
aquaMakc, мы только учимся, так что пока такие извращения
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
23.06.2015, 13:44
D-Tritus, Синхронные методы вообще я бы не рекомендовал использовать, по крайней мере в однопоточных приложениях. Лично я всего пару раз встречал ситуации, когда блокировка потока до выполнения операции чтения/записи была обоснована.
В качестве учебных целей можно и синхронные методы применить, конечно, но RTFM никто не отменял. И надо отдавать себе отчёт, что во "взрослом" приложении надо будет делать всё по другому.
0
13 / 13 / 1
Регистрация: 24.11.2014
Сообщений: 94
23.06.2015, 13:49  [ТС]
aquaMakc, да я все прекрасно все понимаю, просто когда начал с ними знакомиться честно говоря ощутимо поплыл, поэтому и остановился на более понятных и привычных синхронных. Видать надо просто больше времени для переварки материала - программку я позднее перепишу. А пока придумал один небольшой костыль...
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
23.06.2015, 13:54
D-Tritus, да какой костыль? в цитате с MSDN всё уже написано, как надо делать.
0
13 / 13 / 1
Регистрация: 24.11.2014
Сообщений: 94
23.06.2015, 13:58  [ТС]
aquaMakc, надо позже похоже вставать - совсем сплю А какое значение таймаута будет оптимальным?
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
23.06.2015, 14:05
Смотря какой транспорт. Например, если GPRS, там ждать пакет до 5 минут можно. Если Ethernet я бы больше секунды не ставил.
0
13 / 13 / 1
Регистрация: 24.11.2014
Сообщений: 94
23.06.2015, 14:08  [ТС]
aquaMakc, понятно, спасибо - сейчас внесем "поправки"
0
484 / 397 / 68
Регистрация: 14.02.2014
Сообщений: 1,930
23.06.2015, 14:09
Соответственно надо отлавливать исключение.
Особенность исключения сокета, что у него несколько десятков причин. Их нужно смотреть в свойстве исключения SocketException.SocketErrorCode.
Так-что оборачивай код в try-catch. Лови исключение SocketException, проверяй SocketErrorCode и обрабатывай как тебе будет нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.06.2015, 14:09
Помогаю со студенческими работами здесь

TCP-сервер и TCP-клиент. Клиент не находит файл.
Всем привет! Решил изучать передачу данных по сети и начал с освоения примера, приведённого в книге "Visual C# 2008. Базовый курс...

Реализовать на tcp сокетах переподключение к tcp серверу в случае потери соединения
Всем привет, подскажите как можно реализовать на tcp сокетах переподключение к tcp серверу в случае потери соединения?

Если сервер TCP то и клиент тоже должен быть TCP?
Я полный новичок И я так понимаю есть TCP client (Sockets), TCP server (Sockets), и ClientSocket (ScktComp), ServerSocket (ScktComp) ...

Не приходит ответ на TCP клиент андроид с TCP сервера Qt
У меня есть TCP клиент андроид и TCP сервер Qt с клиента на сервер сообщения доходят нормально. Ну а с сервера на клиент сообщения(ответы)...

как создать TCP клиент, TCP сервер ? На С++
Очень нужна помощь!Как написать TCP клиент, TCP сервер. Например,клиент вводит строку с клавиатуры и отсылает ее серверу.только перед...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru