Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
Для связи между программами используются сокеты - Класс Socket . Сервер Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Далее -прием/передача Клиент Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Далее,аналогично, прием/передача. И в клинте и в сервере прием/передача обвешаны try... catch. Клиент и сервер оформлены как классы. Здесь код объединен в порядке выполнения. Весь код рабочий, здесь вопросов нет. По условию задачи, связь клиент-сервер может иногда обрываться. вопрос в том, как обеспечить восстановление связи без полной перезагрузки сервера и клиента? К сожалению, в MSDN этот процесс не определен. Сейчас для восстановления связи работаю с соответствующими handler на стороне сервера и клиента. Связь возобновляется, но результат непредсказуем - то возобновляется, то нет. Пробовал разные варианты - устойчивости повторного коннекта достичь не удалось. "Есть многое на свете, друг Горацио, что и не сразу в голову придет." М. Твен "Приключения Геккельбери Финна" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 17:47 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBAИ в клинте и в сервере прием/передача обвешаны try... catch. Я не большой специалист в микромягком программировании , но по логике, при проблемах чтения(записи) из(в) сокет программа вывалиться в соотвествующий потере соединения блок catch . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 19:15 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
д0kХЯ не большой специалист в микромягком программировании , но по логике, при проблемах чтения(записи) из(в) сокет программа вывалиться в соотвествующий потере соединения блок catch .Да, для этого они и задуманы, чтобы из try... catch уйти в инициализацию нового соединения и блокировать прием/передачу до коннекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 19:37 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBAд0kХЯ не большой специалист в микромягком программировании , но по логике, при проблемах чтения(записи) из(в) сокет программа вывалиться в соотвествующий потере соединения блок catch .Да, для этого они и задуманы, чтобы из try... catch уйти в инициализацию нового соединения и блокировать прием/передачу до коннекта. Вы сами ответили на свой вопрос. YUBAПо условию задачи, связь клиент-сервер может иногда обрываться. вопрос в том, как обеспечить восстановление связи без полной перезагрузки сервера и клиента? И никто вам тут не поможет, пока вы не покажете как выглядит ваш блок try... catch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 19:42 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBAд0kХЯ не большой специалист в микромягком программировании , но по логике, при проблемах чтения(записи) из(в) сокет программа вывалиться в соотвествующий потере соединения блок catch .Да, для этого они и задуманы, чтобы из try... catch уйти в инициализацию нового соединения и блокировать прием/передачу до коннекта. То есть у тебя код в духе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. Да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 19:45 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
White OwlYUBAпропущено... Да, для этого они и задуманы, чтобы из try... catch уйти в инициализацию нового соединения и блокировать прием/передачу до коннекта. То есть у тебя код в духе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. Да? Нет У вас на операциях чтения-записи сокета должно быть: Код: plaintext 1. вы должны узнать, что произошло и при неоходимости переустановить соедениние. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 19:58 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
д0kХWhite Owlпропущено... То есть у тебя код в духе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. Да? Нет У вас на операциях чтения-записи сокета должно быть: Код: plaintext 1. вы должны узнать, что произошло и при неоходимости переустановить соедениние. извини , я перепутал тебя с ТС. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:00 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
д0kХИ никто вам тут не поможет, пока вы не покажете как выглядит ваш блок try... catch.Вопрос темы не в try... catch, а в принципах повторной корректной инициализации сокетов клиента и сервера. Например, сервер. Листенер рассчитан на очередь в 10 соединений. С ним делать ничего не надо. В начальном случае при наличии клиента он вызывает следующий за ним Accept, принимающий соединение. При повторном коннекте листенер, оч. похоже, ничего не вызывает, и остается лупить этим Accept до полного одержания, что неправильно. Иногда это срабатывает, иногда нет. Так что, вопрос не программный, а идеологический - как правильно с этой конструкцией работать при повторном коннекте. Кстати, в WinSock конструкции примерно идентичны, и при ошибках вываливается, в конечном итоге в хидеры WinSock. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:16 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
White Owl То есть у тебя код в духе: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. Да?Безусловно, только sListener.Listen(10); - имхо, здесь не надо. Листенер и так очередь на 10 претендентов на соединение. А вот проверить листенер на наличие очереди не мешает, перед вызовом Accept. Буду искать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:23 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBAд0kХИ никто вам тут не поможет, пока вы не покажете как выглядит ваш блок try... catch.Вопрос темы не в try... catch, а в принципах повторной корректной инициализации сокетов клиента и сервера. Например, сервер. Листенер рассчитан на очередь в 10 соединений. С ним делать ничего не надо. В начальном случае при наличии клиента он вызывает следующий за ним Accept, принимающий соединение. При повторном коннекте листенер, оч. похоже, ничего не вызывает, и остается лупить этим Accept до полного одержания, что неправильно. Иногда это срабатывает, иногда нет. Так что, вопрос не программный, а идеологический - как правильно с этой конструкцией работать при повторном коннекте. Кстати, в WinSock конструкции примерно идентичны, и при ошибках вываливается, в конечном итоге в хидеры WinSock. Я уже сам запутался в ваших мыслях и словах. где у вас YUBAДалее -прием/передача Для понимания происходящего в сокетах приблизительно , сюда ищите аналог для вашего сетевого класса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:28 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
Предупреждаю: код не смотрел. В общем случае решение простое: 1. В начале прописать алгоритм установки соединения, т.е. случаи неудачных попыток и повторные попытки повтора. 2. В случае обрыва все почистить и в п.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:29 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
Dima TПредупреждаю: код не смотрел. В общем случае решение простое: 1. В начале прописать алгоритм установки соединения, т.е. случаи неудачных попыток и повторные попытки повтора. 2. В случае обрыва все почистить и в п.1 У коллеги есть try... catch. В catch должны обрабатываться разрывы , и при необходимости перустанавливаться соединения , что бы следующий в цикле try переотправил то, что обрвалось по ошибке в том числе и ошибке записи в сокет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 20:34 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
д0kХDima TПредупреждаю: код не смотрел. В общем случае решение простое: 1. В начале прописать алгоритм установки соединения, т.е. случаи неудачных попыток и повторные попытки повтора. 2. В случае обрыва все почистить и в п.1 У коллеги есть try... catch. В catch должны обрабатываться разрывы , и при необходимости перустанавливаться соединения , что бы следующий в цикле try переотправил то, что обрвалось по ошибке в том числе и ошибке записи в сокет. И зря. Ненужное усложнение. На каком месте оборвалось? Непонятно. 100500 вариантов, все не обработать. Тупо почистить и на старт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 21:17 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
Dima TИ зря. Ненужное усложнение. На каком месте оборвалось? Непонятно. 100500 вариантов, все не обработать. Тупо почистить и на старт.Ну, все и не надо обрабатывать, только разрывы. Зачем все и тупо чистить? В сервере листенер уже работает. Остается почистить следы Accept и вызвать его заново. Вроде. ЗЫ По MSDN оказалось, что узнать состояние листенера нереально.( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 21:53 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBAсервер. Листенер рассчитан на очередь в 10 соединений. С ним делать ничего не надо. В начальном случае при наличии клиента он вызывает следующий за ним Accept, принимающий соединение. При повторном коннекте листенер, оч. похоже, ничего не вызывает, и остается лупить этим Accept до полного одержания, что неправильно. Иногда это срабатывает, иногда нет. бред какой-то. Нет никаких проблем с листенером и accept ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 22:02 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
Изопропилбред какой-то. Нет никаких проблем с листенером и acceptВаши предложения? По MSDN получается, что остается только долбить Accept в try...catch. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 22:06 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBAВаши предложения? 1)выбросить на помойку Managed c++ 2)спокойно запрограммировать сокеты в соответсвии с документацией без всяких exceptions ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 22:21 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
Изопропил1)выбросить на помойку Managed c++ Вместе с .net классами. Обычные функции BSD-сокетов гораздо проще в применении и понимании. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 22:38 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
Изопропил1)выбросить на помойку Managed c++ 2)спокойно запрограммировать сокеты в соответсвии с документацией без всяких exceptions1. не могу 2. Так и делаю. К сожалению, не все в документации однозначно прописано. Будем считать, что с сервером разобрались, и никаких изменений вносить не надо. Да, не сказал, что Accept вызывается в блокирующем режиме, и, на деле, его бесконечный вызов может случиться только при возникновении исключений. Теперь 2-й вопрос - автоматом переподключить клиент. Повторю код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Здесь вообще, полагаю не может быть ничего неправильного. - удаляем отработавший sender (в соответствии с MSDN) и далее последние 4 строчки. Не исключено, что хватило бы и одного sender->Connect(ipEndPoint), не знаю. Видимо причины неоднозначного повторного коннекта не в некорректном применении сокетов. И то хорошо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 23:03 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBA, Dispose этому говнищу не забываешь сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 23:42 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
ИзопропилYUBA, Dispose этому говнищу не забываешь сделать?Не забываю. Кое где на Dispose при компиляции ругается и просит вызвать деструктор sender->~Socket(); VS видней.)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 00:17 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
д0kХDima TПредупреждаю: код не смотрел. В общем случае решение простое: 1. В начале прописать алгоритм установки соединения, т.е. случаи неудачных попыток и повторные попытки повтора. 2. В случае обрыва все почистить и в п.1 У коллеги есть try... catch. В catch должны обрабатываться разрывы , и при необходимости перустанавливаться соединения , что бы следующий в цикле try переотправил то, что обрвалось по ошибке в том числе и ошибке записи в сокет. Не факт, смотря как он там все написал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 05:49 |
|
||
|
Сокеты Беркли -реконнект.
|
|||
|---|---|---|---|
|
#18+
YUBA, как обеспечить восстановление связи без полной перезагрузки сервера и клиента а как это сделать с полной перезагрузкой сервера и клиента уже известно ?7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.03.2017, 18:28 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39415063&tid=2018257]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
161ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 271ms |
| total: | 529ms |

| 0 / 0 |
