![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 23.10.2007
Сообщений: 7
|
![]()
Доброго дня!
Может кто встречался с проблемой. ServerSocket при разрыве связи с клиентом продолжает удерживать порт в открытом состоянии, как будьто ничего не произошло. Если клиент снова выходит на связь, то сервер открывает для него новое соединение, а старое так и остается открытым. Как решить проблему? ![]() |
![]() |
![]() |
![]() |
#2 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Ну вообще то,я если я понял, сервер и должен держать постоянно порт по его айпи. А клиент коннектиться-дисконнектиться, сервак лиш будет знать что клиент сделал, но не будет самостоятельно (без ошибок) выключать сокет.
|
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]() Цитата:
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 23.10.2007
Сообщений: 7
|
![]()
Когда происходит разрыв в канале связи, то сервер этого не ощущает и держит соединение, как будто ничего не случилось. Зато клиент сразу ощущает разрыв связи с сервером и клиентская программа снова начинает добиваться связи с сервером.
Если канал связи восстановлен, то клиент снова соединяется с с сервером, но уже в другом потоке. Старый же так и продолжает висеть в списке активных клиентов. ![]() Последний раз редактировалось leontv; 25.10.2007 в 09:01. |
![]() |
![]() |
![]() |
#5 | |
Регистрация: 23.10.2007
Сообщений: 7
|
![]() Цитата:
![]() И будет держать этот коннект в списке активных соединений. ![]() А когда у клиента восстановится GPRS связь и он снова пошлет серверу запрос на установление с ним сконнекта, то сервер посчитает его НОВЫМ клиентом и откроет для него НОВОЕ активное соединение. Последний раз редактировалось leontv; 25.10.2007 в 08:58. |
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
Так проверяйте клиента, в чем проблема.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#7 |
Регистрация: 23.10.2007
Сообщений: 7
|
![]()
Клиентов очень много, за сотни... Организовывать отдельный процесс, который бы каждому клиенту периодически посылал что-то типа "ты еще здесь" и ждать ответа типа "пока здесь еще" довольно муторно. Да и трафик кушать начнет не слабо.
![]() Последний раз редактировалось leontv; 25.10.2007 в 09:50. |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 13.12.2006
Сообщений: 3,859
|
![]()
А как по вашему работает тунелирование ? именно так
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи |
![]() |
![]() |
![]() |
#9 |
Android Developer
Старожил Подтвердите свой е-майл
Регистрация: 19.02.2007
Сообщений: 3,708
|
![]()
Ну вот у протоколах тот же ICQ - есть типа AliveTimer )) т.е. через определенное время клиент должен присылать пакет что я в сети, иначе серв его удаляет.
|
![]() |
![]() |
![]() |
#10 |
Пользователь
Регистрация: 03.11.2007
Сообщений: 25
|
![]()
Еще вопрос по работе с сокетами в связке клиент-сервер.
Задача такая: необходио установить связь, а потом сразу же ее разорвать со стороны клиента, я сделал так: (клиентская часть) -------- -------- ------- procedure TForm1.SendBtnClick(Sender: TObject); begin ClientSocket.Port:=7777 ClientSocket.Address:=127.0.0.1; ClientSocket.Active:=true; ClientSocket.close; end ; -------- -------- ------- ПРОБЛЕММА в том, что при вызове этой процедуры(нажатию на кнопку) порт открывается, но незакрывается, никак. Думал слишком быстро идет смена команд, делал так: procedure TForm1.SendBtnClick(Sender: TObject); begin ClientSocket.Port:=7777 ClientSocket.Address:=127.0.0.1; ClientSocket.Active:=true; sleep(1000); ClientSocket.close; end ; НЕПОМОГЛО работает только таким образом : procedure TForm1.SendBtnClick(Sender: TObject); begin ClientSocket.Port:=7777 ClientSocket.Address:=127.0.0.1; ClientSocket.close; ClientSocket.Active:=true; end ; Порт открывается, затем при повторном запуске процедуры закрывается и опять открывается. Мучаюсь целый день, ПОМОГИТЕ |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Serversocket,clientsocket | prizrak1390 | Работа с сетью в Delphi | 10 | 21.04.2009 16:04 |
Вопрос про ServerSocket и ClientSocket | civic.qip | Работа с сетью в Delphi | 8 | 27.09.2008 02:04 |
Кто Етот ServerSocket ? | combays | Помощь студентам | 5 | 24.08.2008 21:40 |
Работа с Clientsocket и Serversocket | prizrak1390 | Работа с сетью в Delphi | 3 | 26.04.2008 22:59 |
загадочные clietnsocket и serversocket! | steck | Работа с сетью в Delphi | 5 | 16.08.2007 14:48 |