Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

---|Ветка была без названия|---


Страницы:   1 2 3 4 5 6 7

h0use ©   (2003-10-30 12:28:00) 

Уважаемые мастера,
есть проблема, используется компонета indy idTCPServer отладил на обыкновенной аппликации процес соединения и передачи данных клиенту, затем перенес этот код в Сервис. НО, теперь клиент не может достучаться до сервера. Видимо теперь сервер стартует с правами System. А как сделать так, чтоб он стартовал с правами хотя бы администратора? Или вообще как сделать, чтоб клиент таки достучался до сервера в сервисе?


h0use   (2003-10-31 13:11:00) [61]

Сдела как сказали...ничего не изменилось, сообщений не появилось, т.е. как я и предполагал в процедуры соединения Indy сервер не заходит, хотя сокет открывает.


Digitman   (2003-10-31 13:07:00) [62]


> h0use


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

и я понятия не имею, в каких кодовых потоках вызываются обработчики тех или иных событий TCPServer"а !

а ты еще упираешься) ... давным-давным бы уже дал мне детальную инф-цию о том, в каком код.потоке вызываются подозрительные, на мой взгляд, обработчики !


Digitman   (2003-10-31 12:57:00) [63]


> h0use


мы тут чем занимаемся вообще ? ищем твои ляпы или плодим новые ошибки в твоей программе ?

еще ракз тебе повторяю - НЕДОПУСТИМО вызывать ShowMessage() в доп.код.потоке !!!!

делай как тебе говорят !!!


Digitman   (2003-10-31 12:52:00) [64]


> h0use


бестолковое, ничем не оправданное и неаргументированное упрямство !

ты хоть что-нибудь слышал о потоконезащищенности VCL ?


h0use   (2003-10-31 12:47:00) [65]

Да не к терапевту, просто зачем огород городить с messagebox или вообще новый юнит писать, если работает то что тработает. Я понимаю, что не хорошо класть showmessage, но пока это не сказывается на работоспособности его мне легче ставить в критические места (меньше писанины)


Reindeer Moss Eater   (2003-10-31 12:42:00) [66]

Не, не, к терапевту ....


h0use   (2003-10-31 12:28:00) [67]

Да нет, не то, showmessage то как раз работает, и для отладки нормально, другое дело, что сами процедуры не работают, хотя клиент коннект видит...но сообщения не получает и не отправляет.


Digitman   (2003-10-31 12:15:00) [68]


> h0use


> Ха..поставил showmessage везде


недопустимо !!!

я же тебе сказал - либо штатный метод TServer.LogMessage() либо MessageBox() вызывай в контрольных точках ! Что непонятного ?

еще раз на огрурцах показываю :


procedure TBAService.TCPServerDisconnect(...);
begin
try
.. сюда добавь все что у тебя там есть в теле обработчика этого события

MessageBox(0, "", "Success", MB_OK or MB_SETFOREGROUND or MB_TOPMOST);

except
on E: Exception do
MessageBox(0, "Исключение !", PChar(e.ClassName + " " + e.Message), MB_OK or MB_SETFOREGROUND or MB_TOPMOST);
end
end;


Reindeer Moss Eater   (2003-10-31 11:36:00) [69]

Только не помешает добавить потокобезопастность.


Reindeer Moss Eater   (2003-10-31 11:35:00) [70]

unit LogUnit;

interface

procedure Log(const AMsg:string; const AParam:string = "");

implementation

uses SysUtils;

var LogName:string;

procedure Log(const AMsg : string; const AParam : string = "");
var F:Text;
begin
Assign(F,LogName);
try
if FileExists(LogName) then Append(F) else Rewrite(F);
Writeln(F,FormatDateTime("dd.mm.yyyy hh:mm:ss",Now),#9,AMsg,#9,AParam);
finally
Close(F);
end;
end;

initialization
LogName:=ChangeFileExt(ParamStr(0),".log");
end.


h0use   (2003-10-31 11:31:00) [71]

Ха..поставил showmessage везде, так блин в сервисе даже TCPServerExecute не запускается


h0use   (2003-10-31 11:26:00) [72]

У меня такое подозрение, что у меня запись в лог не работает, потому как кроме системных сообщений об успешном старте или остановке, других сообщений нет


Digitman   (2003-10-31 11:06:00) [73]

так ... понятно ...

поехали дальше


procedure TBAService.TCPServerDisconnect(...);
begin
try
.. сюда добавь все что у тебя там есть в теле обработчика этого события
except
on E: Exception do
... здесь пиши в лог e.Classname + e.Message ..
end
end;


о результатах записи в лог сообщи


h0use   (2003-10-31 10:35:00) [74]

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


Digitman   (2003-10-31 10:27:00) [75]

туту еще одну несуразицу увидел у тебя
ты уверен, что обработчики событий TCPServerConnect/Disconnect выполняются в осн.код.потоке ? Если не уверен, то какое ты имеешь право обращаться из нескольких код.потоков одновременно к списку Clients, не защищенному ни одним объектом синхронизации ? Список-то един для всех код.потоков ! Один код.поток будет добавлять в список элемент, другой в это время удаляет элемент - что получится ? Бардак !


Digitman   (2003-10-31 10:18:00) [76]


> h0use


ну чего ты демагогию-то развел ? "запущена" БД, "не запущена" ... "глюки", не "глюки"..)

ты помощи просишь в отладке ? значит, делай как тебе говорят, если сам не в состоянии отладить свою логику !

меня интересует, ВЫПОЛНЯЕТСЯ ли сторочка, выделенная жирным !
вот и будь любезен не рассуждать о странностях жизни, а отвечать на четко поставленный вопрос)


h0use   (2003-10-31 10:02:00) [77]

flBaseStat - Это флаг запущена БД или нет, но даже если не запущена, то запускается процесс дисконнекта, который сейчас при любом пермишине одинаков, так как клиенту полюбому отправляется сообщение, кторое он должен прочитать, но именно на чтении он и отваливается с ошибкой! Пока весь этот текст крутился в тестовой форме как приложение, все работало 100% без глюков на любом колличестве клиентов, только я это все сунул в сервис, сразу клиент перестал получать данные от сервера.


Digitman   (2003-10-31 08:21:00) [78]


> а где, спрашивается, происходит присвоение Client.Permission


пардон, не Client.Permission, а flBaseStat ?? ведь только при flBaseStat = True это св-во получает значение = 1 !


Digitman   (2003-10-31 08:17:00) [79]


if flBaseStat then Client.Permission:=1; //где инициируется flBaseStat = True ?
If Client.Permission<>1 then
begin
// здесь поставь запись в лог
TCPServerDisconnect(AThread); // сильное подозрение, что эта строчка выполняется, ибо Client.Permission = 0
Exit;
end;


а где, спрашивается, происходит присвоение Client.Permission


h0use   (2003-10-30 17:53:00) [80]

Я тоже, надеюсь за вечер админы не прибьют тред. если что, то я тебе мыло отправил.


Страницы:   1 2 3 4 5 6 7

Наверх

Титульная страница Поиск, карта сайта Написать письмо