Главная страница
    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.044 c
2-1179425992
Alexdeil
2007-05-17 22:19
2007.06.10
График


2-1179754764
Bad_B
2007-05-21 17:39
2007.06.10
Что-то вроде триалки:-)


2-1179413482
Qazxswedc1
2007-05-17 18:51
2007.06.10
поиск файлов на локальном диске


15-1179035202
Пол
2007-05-13 09:46
2007.06.10
инет-магазин


15-1179385137
Kerk
2007-05-17 10:58
2007.06.10
Oracle External Procedure на Delphi





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский