|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
Пробую написать простенькую клиент-серверную штуку и понял, что совсем не знаю как работать с сокетами. Пишу серверную часть, имею Socket с установленным соединением. Хочу получить пользовательский посимвольный ввод с внешней стороны - пользователь подключен через telnet. Соответственно, со своей серверной стороны хочу обрабатывать InputStream от сокета: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Падает с эксепшеном: Exception in thread "Thread-14" java.net.SocketTimeoutException: Read timed out И, в принципе, логично. У сокета есть таймаут, если клиент за это время ничего не натыкал клавишами в телнете, соединение должно отвалиться. Вопрос, как в подобном случае сделать получение символов с ожиданием ввода? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.07.2021, 23:51 |
|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
Этот таймаут можно контролировать, например, установить в 1 час: Код: java 1. 2. 3.
Если мы работаем с каким-то сервисом, то конечно этот таймаут должен быть небольшим. Но если это пользовательский ввод, то его нужно увеличить. Клиентская программа при этом может либо показывать пользователю ошибку, либо автоматически стартовать соединение заново. PS: у BufferedReader'a есть readLine(), твой метод можно оформить проще: Код: java 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2021, 00:11 |
|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
NullPointer Падает с эксепшеном: Exception in thread "Thread-14" java.net.SocketTimeoutException: Read timed out И, в принципе, логично. У сокета есть таймаут, если клиент за это время ничего не натыкал клавишами в телнете, соединение должно отвалиться. Вопрос, как в подобном случае сделать получение символов с ожиданием ввода? Насколько я помню у сокета 30 секунд таймаут для веб клиента через браузер. Эта вещь ни чем не лечится. Народ просто тупо каждые 10-20 секунд пингует коннекшин чтоб не упал. Как дело обстоит с телнет не знаю. Но замечу этот момент можно поискать на том же стековерфло так как тема злободневная. Удачи ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2021, 21:45 |
|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
Sergunka, 30 минут. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 03:50 |
|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
Sergunka NullPointer Падает с эксепшеном: Exception in thread "Thread-14" java.net.SocketTimeoutException: Read timed out И, в принципе, логично. У сокета есть таймаут, если клиент за это время ничего не натыкал клавишами в телнете, соединение должно отвалиться. Вопрос, как в подобном случае сделать получение символов с ожиданием ввода? Насколько я помню у сокета 30 секунд таймаут для веб клиента через браузер. Эта вещь ни чем не лечится. Народ просто тупо каждые 10-20 секунд пингует коннекшин чтоб не упал. Как дело обстоит с телнет не знаю. Но замечу этот момент можно поискать на том же стековерфло так как тема злободневная. Удачи в firefox оно правится с помощью about:config я помню проверял там было чтото такое. Вроде 3 мин было, может поменяли уже с того момента времени много прошло. Наверняка и keep-alive default timeout value как то регулируется в настройках. Но тут может быть сложее nginx тоже настраивается read, write timeout там что соединение может рваться с двух сторон. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 11:55 |
|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
для java время сессии для вэб задаётся на сервере . по умолчанию 30 минут, можно менять из кода, можно продлять. как для телнета - хз. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 12:10 |
|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
вадя для java время сессии для вэб задаётся на сервере . по умолчанию 30 минут, можно менять из кода, можно продлять. как для телнета - хз. сессия и сокет не совсем одно и тоже ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 12:46 |
|
Чтение пользовательского ввода из сокета
|
|||
---|---|---|---|
#18+
Сокет и веб-сокет - тоже совсем разные. И таймаут у первого - настраивается программно. https://docs.oracle.com/javase/6/docs/api/java/net/Socket.html#setSoTimeout(int) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.07.2021, 14:07 |
|
|
start [/forum/topic.php?fid=59&fpage=5&tid=2120386]: |
0ms |
get settings: |
24ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
197ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 312ms |
0 / 0 |