215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Клиент - Сервер. Вечное ожидание сообщения04.12.2018, 14:40. Показов 2412. Ответов 6
Метки нет (Все метки)
Грубый набросок.
1)Первый случай Клиент:
У нас клиент Клиент вышел 2) Клиент:
У нас клиент Сервер навечно будет ждать сообщение которого не будет. Какими проверками можно определить что клиента уже нету? Cервер:
0
|
04.12.2018, 14:40 | |
Ответы с готовыми решениями:
6
Клиент-сервер. Как в многопользовательском чате реализовать личные сообщения Клиент-сервер: форма закрывается после второй отправки сообщения Клиент-Сервер: приватные сообщения в чате Сервер не принимает сообщения TCP или клиент не отправляет |
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|
05.12.2018, 11:51 [ТС] | 2 |
Решение: реализация heart bit или ping pong
0
|
05.12.2018, 18:24 | 3 |
Defences,
Когда клиент отключается сам, метод Read возвращает пакет нулевой длины (то есть у вас будет bytesRead == 0). Это и является признаком отключения клиента. Но в случае потери связи (обрыв интернета или что-то в этом духе), пакет нулевой длины скорее всего не придет. Для отслеживания таких случаев - да можно использовать heartbeat.
1
|
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|
05.12.2018, 20:13 [ТС] | 4 |
Storm23, изучаю tcp протокол, в локал хосте всегда 0 байт приходит. А вот если использовать реальную сеть, то увы по тестам очень редко приходит 0 байт и 2 часа или сколько там таймаут у Read клиент просто висит, если сделать 100 входов, то будет показываться что 100 пользователей обслуживается сервером, а на самом деле 1, другие 99 висят...
Возможно потому что для тестов я купил сервер в Азии, стабильность хромает, как раз то что нужно для тестов. Очень часто рвется соединение или искажаются пакеты(теряются)
0
|
05.12.2018, 20:40 | 5 |
Вообще-то перед закрытием сокета нужно вызывать Socket.Shutdown. Именно этот метод отправляет нулевой пакет. По идее TcpClient.Close() должен сам вызывать Shutdown, но я не уверен. Можете попробовать вручную вызывать этот метод перед закрытием: tcpClient.Client.Shutdown()
0
|
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
|
|
06.12.2018, 00:12 [ТС] | 6 |
Storm23, да, он работает отлично, он по Dispose вызывается как я понимаю, если даже просто закрыть программу он вызывается. Тут дело если пропал интернет, то никак не доставить. Поэтому самое лучшее решение heart beat
0
|
12.12.2018, 14:52 | 7 |
https://docs.microsoft.com/ru-... work-4.7.2
Вообще Tcp 100% должен мониторить что соединение еще живо, и вроде кидать exception при его потере. Вопрос только в таймауте.
0
|
12.12.2018, 14:52 | |
12.12.2018, 14:52 | |
Помогаю со студенческими работами здесь
7
Клиент-сервер. После каждой строки сообщения появляется символ Клиент-сервер в один клик!(элемет сервер, клиент) Клиент-Серверное приложение. Как сделать, чтобы сервер сам отправлял сообщения на клиент Вывод принятого сообщения (клиент-сервер) winsock - клиент\сервер (теряется часть сообщения) Сервер-клиент на сокетах: при отправке второго сообщения, программа падает Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |