|
|
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
Есть сервер который обслуживает клиентов, при подключении клиентов сервер увеличивает счётчик на один, то есть считает колличество подключенных клиентов. Когда клиент хочет покинуть сервер он посылает ему сообщение и счётчик уменьшается на 1(рессурсы для этого клиента освобождаются). Но как быть когда клиент не может послать сообщение серверу, о том что он хочет его покинуть(например пропала сеть, или не коректное завершение программы клиента). Как серверу узнать что клиент отключился ?(сервер только отвечает на сообщения клиента, сам ему ничего не посылает) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2008, 16:53 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
По таймауту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2008, 16:58 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
Vasya Pupkin 111По таймауту. По какому там-ауту ???? Клиент может час не посылать никаких сообщений серверу....а сервер сам не посылает вобще....только отвечает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2008, 20:06 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
Клиент может регулярно уведомлять о том, что он подключен. Как только перестал уведомлять - значит отключился. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2008, 21:04 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
Student007Клиент может регулярно уведомлять о том, что он подключен. Как только перестал уведомлять - значит отключился. Наверное так и прийдеться делать...только я не знаю на сколько это эфективно, особенно есле будет много клиентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 00:14 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
Student007Клиент может регулярно уведомлять о том, что он подключен. Как только перестал уведомлять - значит отключился. Наверное так и прийдеться делать...только я не знаю на сколько это эфективно, особенно есле будет много клиентов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 00:17 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
D-TAUНаверное так и прийдеться делать...только я не знаю на сколько это эфективно, особенно есле будет много клиентов. - обычно чтение из потока связанного с удаленным клиентом ведется в бесконечном цикле, когда клиент отвалился, попытка чтения приводит к исключительной ситуации (в Java). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 02:03 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
Kachalov D-TAUНаверное так и прийдеться делать...только я не знаю на сколько это эфективно, особенно есле будет много клиентов. - обычно чтение из потока связанного с удаленным клиентом ведется в бесконечном цикле, когда клиент отвалился, попытка чтения приводит к исключительной ситуации (в Java). Ну откуда знать отвалился клиент или нет, если он ничего не посылает серверу, я пишу на C# и использую десериализацию для передачи сообщений, пока объет не десериализируется поток весит на этом методе, даже посли отключению клиента и никакое исключение не генерируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 15:44 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
D-TAUНу откуда знать отвалился клиент или нет, если он ничего не посылает серверу Еще раз: - сервер читает данные из потока чтения связанного с сокетом клиента в бесконечном цикле - когда сокет клиента закрылся, поток чтения гибнет - попытка чтения из не существующего потока чтения приводит к исключительной ситуации - перехватив исключительную ситуацию можно понять что клиент отвалился D-TAU я пишу на C# - да ради бога, вот и разберитесь как в C# читают данные из потока чтения, скорее всего также как в Java D-TAUиспользую десериализацию для передачи сообщений - ничего не понятно! Вы передаете по сети сериализованые объекты или десериализованные (скорее первое) D-TAUпока объет не десериализируется поток весит на этом методе, даже посли отключению клиента и никакое исключение не генерируется. - не вижу здесь фразы "пока сериализованый объект не считается"? - а надо ли изобретать велосипед? в Java есть RMI, наверняка аналогичная хрень есть и в C# ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 15:59 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
Kachalov D-TAUНу откуда знать отвалился клиент или нет, если он ничего не посылает серверу Еще раз: - сервер читает данные из потока чтения связанного с сокетом клиента в бесконечном цикле - когда сокет клиента закрылся, поток чтения гибнет - попытка чтения из не существующего потока чтения приводит к исключительной ситуации - перехватив исключительную ситуацию можно понять что клиент отвалился Я же писал что при десереализации не гибнет поток при отключения клиента, вобще ничего не происходит, метод пытается десериализировать дальше, то есть виснет, и никакое исключение не происходит....как будто клиент не отключался вобще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2008, 16:33 |
|
||
|
Клиент-сервер(Socket)
|
|||
|---|---|---|---|
|
#18+
по сабжу: невозможно в принципе; такова природа стрима; пока нет EOF -- бум ждать; по сути, вся последовательность как бы независимых друг от друга "запросов" от клиентского сокета -- это один запрос-стрим. Так что, один выход -- задать тайм-аут для операции чтения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2008, 18:58 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35534750&tid=1345025]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
| others: | 217ms |
| total: | 496ms |

| 0 / 0 |
