Пролистал форум — видел что вроде обсуждалось уже, но ответа так и нет...
... собственно вопрос — как можно определить что сокет на клиенте (да впрочем и на сервер) закрыт?
пока что вижу только один способ — чтото записать в сокет; если не удастся — то значит "привет родителям"
но это не совсем удобно — лишний раз делать редстрим() а в это время может быть ктото чегото нужное шлет..
может быть есть другие пути? может както через UDP двигаться както (правда это не надежно — никто не гарантирует доставку UDP пакета)?
Спасибо,
Слава... Богу...

))
Здравствуйте, sshurov, Вы писали:
S>Пролистал форум — видел что вроде обсуждалось уже, но ответа так и нет...
S>... собственно вопрос — как можно определить что сокет на клиенте (да впрочем и на сервер) закрыт?
Не понятно с какой стороны находится код в котором нужно это определить.
Если сокет открыл ты — у тебя есть ссылка на объект класса Socket или ServerSocket. в 1.4 у них появилсия вызов isClosed() который вернет состояние "закрытости" сокета. До 1.4 к сожалению никак проследить нельзя (только если не вызывать операции IO на зактрытом сокете и ловить исключения. Поэтому рекомендую инкапсулировать работу с сокетом в некий класс и в нем отслеживать вызов socket.close().
Если ты имеешь ввиду на другой стороне соединия — то только ловить исключения IO.
S>может быть есть другие пути? может както через UDP двигаться както (правда это не надежно — никто не гарантирует доставку UDP пакета)?
Особенно если на том конце ждут TCP соединения.
Здравствуйте, sshurov, Вы писали:
S>Пролистал форум — видел что вроде обсуждалось уже, но ответа так и нет...
S>... собственно вопрос — как можно определить что сокет на клиенте (да впрочем и на сервер) закрыт?
Я думаю, самое надежное регулярно посылать пульс (heartbeat). Если клиент регулярно посылает нечто, значит он жив. Если сигнал на сервер не приходит от клиента в течении некоторого времени (по любой причине), то считать клиента трупом и отсоединить его. Пусть заново коннектится, если ему это надо.
Здравствуйте, mselez, Вы писали:
M>Здравствуйте, sshurov, Вы писали:
S>>Пролистал форум — видел что вроде обсуждалось уже, но ответа так и нет...
S>>... собственно вопрос — как можно определить что сокет на клиенте (да впрочем и на сервер) закрыт?
M>Я думаю, самое надежное регулярно посылать пульс (heartbeat). Если клиент регулярно посылает нечто, значит он жив. Если сигнал на сервер не приходит от клиента в течении некоторого времени (по любой причине), то считать клиента трупом и отсоединить его. Пусть заново коннектится, если ему это надо.
во! умный вешш говоришь — я так уже и придумал сделать. будем считать что клиент например раз в 5 минут должен слать какойто пакет.
если три раза не прислал — свободен.
Здравствуйте, sshurov, Вы писали:
S>Пролистал форум — видел что вроде обсуждалось уже, но ответа так и нет...
S>... собственно вопрос — как можно определить что сокет на клиенте (да впрочем и на сервер) закрыт?
S>пока что вижу только один способ — чтото записать в сокет; если не удастся — то значит "привет родителям"
S>но это не совсем удобно — лишний раз делать редстрим() а в это время может быть ктото чегото нужное шлет..
S>может быть есть другие пути? может както через UDP двигаться както (правда это не надежно — никто не гарантирует доставку UDP пакета)?
S>Спасибо,
S>Слава... Богу...
))
socket.isClosed()