powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / NIOSocketChannel read
23 сообщений из 23, страница 1 из 1
NIOSocketChannel read
    #38691691
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги подскажите плиз

{code}
int readBytes = socketChannel.read(buffer);

if (readBytes == -1) {
Что корректно делать тут ?
Закрывать connection ? SocketChannel ?

Или просто сбрасывать SelectionKey ?
}
{code}
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691753
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
От ситуации зависит.
Если клиенту нечего вам сообщить, то, вероятно, он ждёт вашего ответа.
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691910
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но это не сигнал к тому что конекшен сдох ?
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691918
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это сигнал к тому, что клиент сделал, как минимум, ShutdownOutput(). И больше ничего.
Всё остальное определяется используемым протоколом и логикой приложения.
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691919
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Но это не сигнал к тому что конекшен сдох?
С фига ли? Если вторая сторона не шлет, данных, то почему обязательно "конекшен сдох"?
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691921
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczbuldozer01Но это не сигнал к тому что конекшен сдох?
С фига ли? Если вторая сторона не шлет, данных, то почему обязательно "конекшен сдох"?

Я пытаюсь понять чем отличаются -1 и 0 в возврате read
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691924
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buldozer01Я пытаюсь понять чем отличаются -1 и 0 в возврате read
Прочитал доку. Я не прав. -1, действительно, свидетельствует о том что channel можно закрывать.
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691925
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ноль - "нечего читать сейчас ".
Минус раз - "достигнут конец файла".
Во втором случае никаких данных более не может быть прочитано. В принципе не может.
Ни одна из этих ситуаций ещё не означает, что надо всё бросить, не отписавшись в OutputStream
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691927
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczbuldozer01Я пытаюсь понять чем отличаются -1 и 0 в возврате read
Прочитал доку. Я не прав. -1, действительно, свидетельствует о том что channel можно закрывать.

Я ее тоже читал перед тем как сюда спрашивать )))

Вот не уверен я socketChannel надо закрыть или SelectionKey сказать cancel
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691931
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczПрочитал доку. Я не прав. -1, действительно, свидетельствует о том что channel можно закрывать.Да с чего вдруг???
У ТС SocketChannel с методами read и write и двусторонней коммуникацией, а не ReadableChannel и WriteableChannel по отдельности.
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691932
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если что это код с сервера

То есть клиент это не мы - мы сервер
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691933
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У клиента тоже просто socketChannel

как клиент в коде может просто закрыть read если socketChannel один ?
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691936
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторю: shutdownOutput()
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691940
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и не забывайте делать инверсию - клиент пишет то, что вы читаете .
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691946
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В нашем коде такой метод не вызывается - зато есть

if (socketChannel != null && socketChannel.isOpen()) {
socketChannel.close();
}
readHandler.shutdown();
writeHandler.shutdown();
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691952
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Существует разница между "вашим кодом" и "кодом клиента".
Мне, честно говоря, сложно представить ситуацию, когда клиент что-то отправляет серверу, но при этом не ждёт отклика.
Почему бы не использовать тогда UDP?
Но даже оставляя в стороне все эти изыски ...
У вас есть данные, которые должны быть отправлены клиенту? Отправляйте и уже потом "тушите свечи".
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691955
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо буду откровенен

Копаю HazelCast и пытаюсь понять какого хрена через раз закрываются конекшены
Добавил дебаг - чуваки ловят -1 и закрывают socketChannel

Теперь вот пытаюсь выяснить это хазелькаст валидно закрывает конекшены на клиенте или просто это говнокод и socketChannel можно и не закрывать
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691967
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну кретины, что скажешь ...
Сокет - механизм двусторонней независимой коммуникации.
Получив признак конца файла при чтении данных, вы должны обработать принятое, отправить данные клиенту и только после этого гасить соединение. Можно "за раз", можно "по разделениям".
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691969
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovНу кретины, что скажешь ...
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38691988
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть конкретизирую.
У приведённого кода есть проблема.

Если клиент:
1. Отправляет запрос
2. Принимает отклик
3. Закрывает соединение
то закрытие канала сервером происходит на шаге три, что корректно и даже необходимо.

Если клиент:
1. Оправляет запрос
2. Закрывает канал записи;
3. Принимает отклик
4. Закрывает канал чтения
то закрытие канала сервером происходит на шаге два и является ошибкой.
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38692065
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovЕсли клиент:
1. Отправляет запрос
2. Принимает отклик
3. Закрывает соединение
то закрытие канала сервером происходит на шаге три, что корректно и даже необходимо.
А можно теоретический вопрос?
А как "закрывает соединение" физически дойдет до сервера?

Я правильно понимаю, что вместо одного сетевого round-trip's "запрос клиента-ответ сервера" по сети пойдет минимум два "запрос клиент-ответ сервера-запрос на закрытие соединения....и так далее...." ?

Для общего развития, совсем слабо представляю, как соккеты поверх пакетных протоколов работают (((
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38692075
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА можно теоретический вопрос?
А как "закрывает соединение" физически дойдет до сервера?

На сколько я помню предыдущее обсуждение по теме, "закрытие" оно между клиентом и сервером никак не "ходит". Можно только по таймауту отвалиться.
...
Рейтинг: 0 / 0
NIOSocketChannel read
    #38692106
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА можно теоретический вопрос?
А как "закрывает соединение" физически дойдет до сервера?Во флагах (последного) отправленного клиентом TCP-пакета.Я правильно понимаю, что вместо одного сетевого round-trip's "запрос клиента-ответ сервера" по сети пойдет минимум два "запрос клиент-ответ сервера-запрос на закрытие соединения....и так далее...." ?Нет.
После того, как соединение установлено, число пакетов , которыми обменяются клиент и сервер, зависит от объёма передаваемых данных и характеристик канала.
Проблема round-trip - несколько из другой серии и, как правило, связана с конкретным протоколом.
Насколько я помню, TCP может подтвердить всё полученное единственным пакетом. Остальное зависит от размеров окон и качества канала.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / NIOSocketChannel read
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]