Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Вниз

Как обработать ошибку при отключении клиента?   Найти похожие ветки 

 
NeyroSpace ©   (2006-11-25 19:14) [0]

Неблокирующий сокет, TCP протокол. К серверу подключается клиент, ему отдельный поток передает данные. Данные записываются в сокет в 2а приема 1 - небольшой заголовок, 2 - данные (несколько килобайт). При закрытии клиента, на сервере выскакивает List index out of bound (0) Т.е. вроде как сервер не может записать данные в сокет с индексом i. (но я же проверяю, что соединение еще есть!)
Если передавать только заголовок, то клиент отключается без ошибок. Т.е. исключение наступает при 2м вызове SendBuf в момент передачи данных.
Подскажите как обработать данную ошибку?

SendingBufferFrames: TList - тут хранятся указатели на кусочки данных (заголовок, данные, заголовок, данные....)

procedure TSenderThread.Execute;
var i: integer;
   pFrame: PFramePacket;
begin
While not Terminated do
 begin
 if Form1.ServerSocket1.Socket.ActiveConnections > 0 then
   begin
     if SendingBufferFrames.Count >= 2 then
       begin
       for i := 0 to Form1.ServerSocket1.Socket.ActiveConnections - 1 do
         begin
         try
         if Form1.ServerSocket1.Socket.Connections[i].Connected = true then
           begin
           Form1.ServerSocket1.Socket.Connections[i].SendBuf(Pointer(SendingBufferFrames.It ems[0])^, sizeof(TFramePacket));//заголовок
           pFrame := Pointer(SendingBufferFrames.Items[0]);
           Form1.ServerSocket1.Socket.Connections[i].SendBuf(Pointer(SendingBufferFrames.It ems[1])^, pFrame.Size);//данные

           FreeMem(SendingBufferFrames.Items[0]);//освобождаем память под заголовок
           SendingBufferFrames.Delete(0);
           FreeMem(SendingBufferFrames.Items[0]);//освобождаем память под данные
           SendingBufferFrames.Delete(0);
           end;
         except
           on e: Exception do
             begin
ошибка перехватывается в этом месте
             end;
         end;
         end;
       end;
   end;
 end;
end;


 
Eraser ©   (2006-11-25 19:21) [1]

>           on e: Exception do

лишнее.


 
NeyroSpace ©   (2006-11-25 19:59) [2]

А что делать? Если убрать Try Except b запускать из среды Delphi, то после появления ошибки можно продолжить работу сервера, а если сервер запускать из ехе, то он закрывается...


 
NeyroSpace ©   (2006-11-25 20:37) [3]

Млин! Если запускать не тот ехешник он и и не будет реагировать на перекомпиляцию))))))
Сорри все заработало, вопрос снят.


 
Eraser ©   (2006-11-25 22:02) [4]

> [2] NeyroSpace ©   (25.11.06 19:59)
> А что делать? Если убрать Try Except b

я не говорил убирать try..except )

> on e: Exception do

какой смысл в этой конструкции?


 
Сергей М. ©   (2006-11-27 08:12) [5]


> NeyroSpace ©   (25.11.06 19:14)


Так делать недопустимо.
Список ActiveConnections не потокобезопасен.


 
Rouse_ ©   (2006-11-27 23:02) [6]

Все начиная от сих:
Form1.ServerSocket1.Socket.ActiveConnections
не потокобезопасно...


 
Сергей М. ©   (2006-11-28 08:48) [7]

К тому же SendBuf() - это функциональный, а не процедурный метод. Тебе это о чем-то говорит ?



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

Форум: "Сети";
Текущий архив: 2007.06.10;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.039 c
15-1179133685
DIANA
2007-05-14 13:08
2007.06.10
нужна помощь! Двумерные массивы..


2-1179396735
17Landgraf
2007-05-17 14:12
2007.06.10
Как изменить свойства файла


2-1179483933
News
2007-05-18 14:25
2007.06.10
Сетевое приложение


2-1179581025
Rafik
2007-05-19 17:23
2007.06.10
TListView


15-1179380544
фотограф
2007-05-17 09:42
2007.06.10
из jpg обратно в RAW





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский