Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.29;
Скачать: CL | DM;

Вниз

Проблема с разрывом socket соединения   Найти похожие ветки 

 
Владимир   (2004-06-24 17:43) [40]

Надо выставить errorcode = 0 иначе ексепт.

procedure TForm1.ServerSocket1ClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
errorcode := 0;
end;


 
APXi   (2004-06-24 19:36) [41]

У меня тоже такая проблема была и есть.
Кто хочет попробовать сделайте простейший сервер и клиента, откомпильте сервер и запускайте его НЕ из делфи, а клиента запустите из дельфи, соеденитесь, а потом просто прервите работу клиента (Run/Program Reset) ошибочка вылетит на сервере.


 
Ne0z ©   (2004-06-24 20:37) [42]

APXi ну Verg же все написал: нельзя закрывать сервак до выхода из обработчика OnClientDisconnect, так что посылаешь в этом обработчике свое сообщение  PostMessage(Handle, WM_DISCONNECT, 0, 0); в обработчике котрого и закрывай сервак...


 
Digitman ©   (2004-06-25 08:29) [43]


> Verg ©   (24.06.04 17:40) [39]


про "педали" - благодарю за поддержку


> Владимир   (24.06.04 17:43) [40]
> Надо выставить errorcode = 0 иначе ексепт.


чушь

никакого "ексепта" без errorcode = 0 - просто будет выведено окно с диагностикой отказа


> APXi   (24.06.04 19:36) [41]


> запускайте его НЕ из делфи, а клиента запустите из дельфи


при чем здесь "из делфи" или "НЕ из делфи" ?


 
False_Delirium ©   (2004-06-25 15:18) [44]

Люди грамотные в данной области с тобой разговаривают, а ты не пользуешься моментом.:)

 При "OnSocketError" и "OnClientDisconnect" ты в первую очередь должен прекратить все операции с "клиентами", для которых был вызван обработчик.

 В "OnSocketError" вставь как минимум
errorcode = 0 ; Socket.Close ;
это позволит тебе избавится от пугающих окошек с уведомлениями.

Одна из составляющий "педалей" находится в спецификации TCP/IP.

Блин, всё-равно Socket Error и вылетевший юзер остаётся в юзер листе на серваке. Исключения воткнул везде, где надо, а не выходит =(

Если клиент завершил работу аварийно или в ином роде некорректно, то следовательно он не смог передать серверной части запрос на завершений и обменяться подтверждающими сегментами. Поэтому твой сервер не определяет, что клиент "мёртв" до следующей попытки отправить данные клиенту.

Чтобы ты себе не усложнял задачу по надлежащей обработке поведения сервера при падении клиента, установи в "OnSocketError" то, что написано выше. И переодически посылай 1 контрольный символ, который никак не обрабатывается клиентом.

Обязательно введи контрольный буфер размера ожидаемых сообщений.

После того, как покажешь свой чат - удали его безвозвратно и начни с начала. Например - устройство протокола, далее исходные коды тех компонентов, которыми ты польуешься.

2DigitMan Приветствую, я видел как ты с самого начала появления на этом форуме помогал новичкам, как росла твоя квалификация и авторитет здесь. Но сейчас у меня складывается мнение, что тебе нужно отдохнуть и обуздать свою инициативу помочь каждому в каждом вопросе, если не хватает терпения на детальное объяснение.
Доказав, что ты специалист в данной области ты позволяешь себе небрежности в общении.


 
Digitman ©   (2004-06-25 17:04) [45]


> False_Delirium ©   (25.06.04 15:18) [44]



> отдохнуть


с удовольствием

держи эстафетную палочку ?


> позволяешь себе небрежности в общении


не спорю ... когда тема скатывается до понимания того , что LMD, выдержки порой, увы, не хватает


 
Verg ©   (2004-06-25 23:14) [46]


> [44] False_Delirium ©   (25.06.04 15:18)


Есть и у тебя "гонево"....


> Обязательно введи контрольный буфер размера ожидаемых сообщений.
>
> После того, как покажешь свой чат - удали его безвозвратно
> и начни с начала. Например - устройство протокола, далее
> исходные коды тех компонентов, которыми ты польуешься.


Ты это вообще, что ты хотел сказать-то?

Пробовал это вслух произнести? :)))
Я лично за водкой решил пойти после таких "откровений" :))


 
Rouse_ ©   (2004-06-26 19:21) [47]

К слову "Гонево"...

> Чтобы ты себе не усложнял задачу по надлежащей обработке
> поведения сервера при падении клиента, установи в "OnSocketError"
> то, что написано выше. И переодически посылай 1 контрольный
> символ
, который никак не обрабатывается клиентом.


Это мы называем грамотный подход? Нет уж.. увольте...


 
False_Delirium ©   (2004-06-28 11:15) [48]

Rouse_ То, что написал я вообще никак не относится к грамотному программированию, а было сориентировано на "мне нужно к завтра"
Что же ты постишь, когда тема уже не актуальна и молчал со своими советами когда человек спрашивал в чём дело?

Verg :) ты прав, написал какую-то чушь.:)

2Digitman Палочка тяжеловата.:)


 
McZim ©   (2004-06-28 11:18) [49]

А что ваще у тебя сервак делает и как выглядет клиент



Страницы: 1 2 вся ветка

Текущий архив: 2004.08.29;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.049 c
6-1085536096
Пиво
2004-05-26 05:48
2004.08.29
Помогите сделать отправку письма в консольном приложении


4-1089994372
Dir
2004-07-16 20:12
2004.08.29
OpenDir


3-1091627006
leonon
2004-08-04 17:43
2004.08.29
Многопоточность при работе с базой


3-1091265633
faost
2004-07-31 13:20
2004.08.29
Ищу более удобный DBGrid


1-1092717893
Sash
2004-08-17 08:44
2004.08.29
загрузка HTML в МЕМО