Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2007, 06:41   #1
leontv
 
Регистрация: 23.10.2007
Сообщений: 7
Вопрос ServerSocket не чуствует разрыва

Доброго дня!
Может кто встречался с проблемой.
ServerSocket при разрыве связи с клиентом продолжает удерживать порт в открытом состоянии, как будьто ничего не произошло.
Если клиент снова выходит на связь, то сервер открывает для него новое соединение, а старое так и остается открытым.
Как решить проблему?
leontv вне форума Ответить с цитированием
Старый 24.10.2007, 16:28   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ну вообще то,я если я понял, сервер и должен держать постоянно порт по его айпи. А клиент коннектиться-дисконнектиться, сервак лиш будет знать что клиент сделал, но не будет самостоятельно (без ошибок) выключать сокет.
BOBAH13 вне форума Ответить с цитированием
Старый 24.10.2007, 16:44   #3
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Цитата:
Сообщение от leontv Посмотреть сообщение
Доброго дня!
Может кто встречался с проблемой.
ServerSocket при разрыве связи с клиентом продолжает удерживать порт в открытом состоянии, как будьто ничего не произошло.
Если клиент снова выходит на связь, то сервер открывает для него новое соединение, а старое так и остается открытым.
Как решить проблему?
Откуда сервер узнает что "клиент снова выходит на связь" ?
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 25.10.2007, 08:45   #4
leontv
 
Регистрация: 23.10.2007
Сообщений: 7
Вопрос

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Откуда сервер узнает что "клиент снова выходит на связь" ?
Когда происходит разрыв в канале связи, то сервер этого не ощущает и держит соединение, как будто ничего не случилось. Зато клиент сразу ощущает разрыв связи с сервером и клиентская программа снова начинает добиваться связи с сервером.
Если канал связи восстановлен, то клиент снова соединяется с с сервером, но уже в другом потоке. Старый же так и продолжает висеть в списке активных клиентов.

Последний раз редактировалось leontv; 25.10.2007 в 09:01.
leontv вне форума Ответить с цитированием
Старый 25.10.2007, 08:49   #5
leontv
 
Регистрация: 23.10.2007
Сообщений: 7
Вопрос

Цитата:
Сообщение от BOBAH13 Посмотреть сообщение
Ну вообще то,я если я понял, сервер и должен держать постоянно порт по его айпи. А клиент коннектиться-дисконнектиться, сервак лиш будет знать что клиент сделал, но не будет самостоятельно (без ошибок) выключать сокет.
В том то и дело, что сервак не будет знать, что клиент сделал, если допустим у клиента пропала GPRS связь, т.е. клиент фактически отключился.
И будет держать этот коннект в списке активных соединений.
А когда у клиента восстановится GPRS связь и он снова пошлет серверу запрос на установление с ним сконнекта, то сервер посчитает его НОВЫМ клиентом и откроет для него НОВОЕ активное соединение.

Последний раз редактировалось leontv; 25.10.2007 в 08:58.
leontv вне форума Ответить с цитированием
Старый 25.10.2007, 09:04   #6
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

Так проверяйте клиента, в чем проблема.
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 25.10.2007, 09:45   #7
leontv
 
Регистрация: 23.10.2007
Сообщений: 7
Вопрос

Цитата:
Сообщение от Квэнди Посмотреть сообщение
Так проверяйте клиента, в чем проблема.
Клиентов очень много, за сотни... Организовывать отдельный процесс, который бы каждому клиенту периодически посылал что-то типа "ты еще здесь" и ждать ответа типа "пока здесь еще" довольно муторно. Да и трафик кушать начнет не слабо.

Последний раз редактировалось leontv; 25.10.2007 в 09:50.
leontv вне форума Ответить с цитированием
Старый 25.10.2007, 09:55   #8
Квэнди
Старожил
 
Аватар для Квэнди
 
Регистрация: 13.12.2006
Сообщений: 3,859
По умолчанию

А как по вашему работает тунелирование ? именно так
ICQ не для вопросов, а для предложений. Для вопросов используйте форум
IRC канал клуба программистов|Мои статьи
Квэнди вне форума Ответить с цитированием
Старый 25.10.2007, 12:36   #9
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Ну вот у протоколах тот же ICQ - есть типа AliveTimer )) т.е. через определенное время клиент должен присылать пакет что я в сети, иначе серв его удаляет.
BOBAH13 вне форума Ответить с цитированием
Старый 03.11.2007, 22:35   #10
zAlexandrz
Пользователь
 
Аватар для zAlexandrz
 
Регистрация: 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 ;

Порт открывается, затем при повторном запуске процедуры закрывается и опять открывается.

Мучаюсь целый день, ПОМОГИТЕ
zAlexandrz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
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