Главная страница
    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.039 c
15-1137706321
Сергей2
2006-01-20 00:32
2006.02.12
1C:Enterprise 8.0


1-1137173195
nordic3
2006-01-13 20:26
2006.02.12
Срочно помогите!


2-1138260734
diwww
2006-01-26 10:32
2006.02.12
не работает VBScript


15-1137669430
boriskb
2006-01-19 14:17
2006.02.12
Я здесь сисадминов встречал...


8-1125641317
palgen
2005-09-02 10:08
2006.02.12
Как поменять разрешение ?





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