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

Вниз

Ошибка при отправке на клиент   Найти похожие ветки 

 
Tor ©   (2005-11-01 11:02) [0]

Доброго времени сутов ALL!
При установке соединения клиента с сервером вызывается эта процедура и все проходит на ура, но когда второй раз она вызывается, то в строчке с коментарием появляется ошибка:

Access violation at address 00566BD4 in module "ITServer.exe". Read of address 00000000.

Получается что такого обьекта как TIdPeerThread(AThread^).Connection уже нет. Но как так может быть.


procedure TDM.SendCmd(ACmd: Integer; AMsg: string; AThread: Pointer);
var
 CommBlock: TCommBlock;
begin
 CommBlock.Command := ACmd;
 CommBlock.Msg := AMsg;
 if Assigned(TIdPeerThread(AThread^)) then
     if TIdPeerThread(AThread^).Connection.Connected then  // Здесь ошибка !!!!!!!!!!!!!!
       TIdPeerThread(AThread^).Connection.WriteBuffer(CommBlock, SizeOf(CommBlock), true);
end;


 
Digitman ©   (2005-11-01 13:39) [1]


> При установке соединения клиента с сервером вызывается эта
> процедура


с Луны вызывается ? или откуда ?


 
Tor ©   (2005-11-01 14:42) [2]

Вызывается, с одной и тойже процедуры. Соединение не прекращается.
Вот отсюда
SendCmd(CMD_LOCK, Msg, AClient.ClientThread);

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


 
Digitman ©   (2005-11-01 15:12) [3]


> Вызывается, с одной и тойже процедуры


т.е. "с потолка".

ибо НЕТ никакой инф-ции о том , ИЗ какой конкретно.

в объяснениях своих пляши от обработчика OnExecute.


 
Tor ©   (2005-11-01 15:56) [4]

А пичем тут OnExecute? Ок
Вот начало:
нажимаем на кнопку

DM.UDPClient.Broadcast(UDP_CONNECT, FOptions.UDPPort);

Дальше сервер ждет когда клиент подключится к серверу через TCP соединение вот событие на установку соединения:

procedure TDM.TCPServerConnect(AThread: TIdPeerThread);
var
 FClient: TSimpleClient;
begin
//  FClient := nil;
 FClient := GetClientByIP(AThread.Connection.Socket.Binding.PeerIP);
 if Assigned(FClient) then
 begin
   FClient.ClientThread := @AThread;
   SetClientStatus(FClient, csLock);
 end
 else
   AThread.Connection.Disconnect;
end;

GetClientByIP - эта ф-ция возвращает клиентский произвольный класс.
ClientThread - это указатель на поток типа TIdPeerThread
SetClientStatus - процедура установки состояния клиента. она ниже

procedure TDM.SetClientStatus(AClient: TSimpleClient;
 AStatus: TClientState; Msg: string = "");
begin
...
 case AStatus of
   csLock: SendCmd(CMD_LOCK, Msg, AClient.ClientThread);
   ...
 end.
...
end;

отсюда вызывается SendCmd

procedure TDM.SendCmd(ACmd: Integer; AMsg: string; AThread: Pointer);
var
CommBlock: TCommBlock;
begin
CommBlock.Command := ACmd;
CommBlock.Msg := AMsg;
if Assigned(TIdPeerThread(AThread^)) then
    if TIdPeerThread(AThread^).Connection.Connected then  // Здесь ошибка !!!!!!!!!!!!!!
      TIdPeerThread(AThread^).Connection.WriteBuffer(CommBlock, SizeOf(CommBlock), true);
end;

Так вот этот путь который я сейчас указал проходит, но когда я второй раз вызываю процедуру SetClientStatus возникает ошибка.


 
Digitman ©   (2005-11-01 16:25) [5]

дурь алгоритмическая какая-то ..

разбираться в этом барахле нет желания.

у тебя под рукой всегда есть встр.отладчик.

какого ляда ты им не воспользовался по сей момент - я не знаю.


 
Tor ©   (2005-11-01 16:31) [6]

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


 
Digitman ©   (2005-11-01 16:53) [7]

когда отладчик не друг - других друзей не ищи.


 
Tor ©   (2005-11-01 16:58) [8]

Да пользовался я отладчиком, ничего путного не сказал. Ошибка скорее всего в непрапвильной передачи адреса. Ладно буду дальше пробывать, одними словами всего не добъешся.
Тема закрыта.


 
Digitman ©   (2005-11-01 17:01) [9]


> пользовался я отладчиком, ничего путного не сказал


врешь.

причем - нагло.



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

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

Наверх




Память: 0.47 MB
Время: 0.037 c
15-1137672308
Digitman
2006-01-19 15:05
2006.02.12
ReactOS - хотелось бы услышать имхи


2-1138253636
Kot_
2006-01-26 08:33
2006.02.12
Как получить текст ошибки и сохранить его в файл.


9-1125154608
Зм1й
2005-08-27 18:56
2006.02.12
Ресурсы


8-1118737713
jakata
2005-06-14 12:28
2006.02.12
разрешение видеозахвата


15-1138108442
Vlad Oshin
2006-01-24 16:14
2006.02.12
Почему может RAR не отсылать письма?





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