Я новичок в сетевом программировании. Мне интересно, можно ли установить сетевое соединение через сокеты между сервером Java и клиентом C и поддерживать связь неограниченно? Я хочу сохранить соединение открытым для обмена данными XML между клиентами.Можно ли открывать открытые сокеты неограниченное время
ответ
Теоретически возможно, чтобы серверные сокеты открывались бесконечно долгое время; однако это невозможно сделать с клиентским сокетом. Основная причина заключается в том, что сокет клиентской стороны зависит от сокета на стороне сервера, обрабатывающего данные, а серверный сокет может закрыть соединение.
В то время как возможно поддерживать связь неограниченно, практические аспекты обычно гарантируют, что такие сокеты не останутся открытыми навсегда. Сетевые сбои, неправильная конфигурация в промежуточных маршрутизаторах, исчерпание полосы пропускания, отсутствие вычислительной мощности и т. Д. Все сгруппированы, чтобы гарантировать, что соединения точка-точка в лучшем случае временные.
Обратите внимание, что сокет на стороне сервера является сокетом, который получает запросы на соединение (отбрасывая соединения, имеющие свои собственные сокеты), поэтому он может быть открыт, даже если нет подключений. Если вы считаете, что сокет является открытым подключением к другому компьютеру, вам необходимо переориентировать свое мышление, чтобы иметь смысл иметь серверные сокеты.
И не забудьте обработать эти досадные «EarthVaporizedException» и «UniverseHasEndedException», указанные выше. –
@LucaGeretti Такой комментарий - это весело, но на самом деле вы просто избегаете ответа на вопрос. Stackoverflow не _meant_ быть скучным, но ответы, которые включают тепловую смерть Вселенной, просто не полезны в не универсальной шкале времени. –
Проблема, описанная в первом абзаце, не ограничивается клиентским сокетом. Он симметричен. Любая из сторон может отказаться от соединения, и поэтому может быть любой промежуточный узел. – EJP
Ничто не является бесконечным (при вычислении), но вы можете сохранить соединение сокета открытым до тех пор, пока выполняются оба приложения.
Это скорее мольба, чем ответ, но, как пользователь, я обнаружил, что сокеты постоянно падают. Вы не можете держать их открытыми неопределенно. Когда гнездо неожиданно закрывается, пожалуйста, (A) сообщите пользователю о том, что соединение было сброшено, и (B) сделать это real легко восстановить такое же соединение. Хорошо, это касается игр, но у меня были клиенты, которые не признали бы, что сервер ушел, и серверы, которые не узнали бы меня, были тем же человеком, что и с отключенным соединением.
- 1. Открытые асинхронные сокеты в PHP
- 2. Можно ли использовать открытые и открытые ссылки
- 3. Закрыть открытые сокеты в дочернем процессе
- 4. IOS Неограниченное время фона
- 5. Как анимировать неограниченное время?
- 6. Нежелательные открытые сокеты в дочернем процессе
- 7. Как обнаружить открытые сокеты в Windows?
- 8. Должен ли я открывать и закрывать сокеты за транзакцию?
- 9. можно выбрать неограниченное количество кнопок
- 10. Неограниченное время сеанса пользователя на сервере Worklight
- 11. Можно ли одновременно открывать две функции в классе в AS3?
- 12. Можно ли открывать новые порты на лету в Kube pod?
- 13. Сокеты Java: открытые соединения от сервера к клиенту
- 14. GetQueuedCompletionStatus блокирует неограниченное время на UDP-сокете
- 15. Pauseing boost :: thread for неограниченное время
- 16. Docker: любой способ перечислить открытые сокеты внутри работающего контейнера докеров?
- 17. Зачем создавать сокеты-каналы больше, чем максимальные открытые файлы?
- 18. Предполагается, что ServerSocket.close() должен закрыть все открытые сокеты?
- 19. Libevent: как закрыть все открытые сокеты при выключении?
- 20. Почему «netstat» не может обнаружить некоторые открытые сокеты?
- 21. Можно ли одновременно открывать как Wi-Fi, так и сотовые сети, на Android?
- 22. Может ли Silverlight 3 открывать розетки?
- 23. Можно ли сделать намерение Chrome CustomTabs не открывать внешнее приложение?
- 24. Можно ли запретить открывать веб-конструктор форм в Visual Studio?
- 25. Можно ли открывать текстовые сообщения непосредственно на стороннем приложении (Android)?
- 26. Можно ли открывать и перелистывать Keynote в моем приложении IOS?
- 27. Можно ли открывать Карты Google с намерением иметь несколько контактов
- 28. Можно ли открывать кнопки общего доступа в модальном окне
- 29. Можно ли копировать, вставлять, открывать новое окно в javascript?
- 30. Можно ли подключить сырые рубиновые сокеты к серверу событий UNIX?
* «Держите соединение открытым бесконечно?» * К сожалению нет. Всего за несколько сотен миллионов лет Земля испарится. –
Нет, в конце концов, вселенная закончится :-) На более практичной ноте, через некоторое время, соединение, вероятно, упадет и должно быть восстановлено из-за проблемы с сетью. –
Может быть, вы имеете в виду «стойкие», а не «бесконечные»? «Бесконечный» выводит циничную сторону в Stackoverflow. : P – kevin628