Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.09.14;
Скачать: CL | DM;

Вниз

Проблема с работой сервера (TWSocket) в сервисе   Найти похожие ветки 

 
Oleg   (2007-10-23 00:14) [0]

Здравствуйте. Такая проблема:

Есть два класса: Сервер и Клиент, оба наследники от TWSocket.
Клиент - создается и "живет" в обычном Application.
Сервер тоже создавался в простом проекте Application, при этом все работает замечательно: сервер стартует, клиент к нему коннектится и они спокойно обмениваются нужными данными. Решил Серверное приложение переписать как сервис.
При использовании точно такого же кода, Сервер стартует и живет нормально, выполняет все действия, а Клиент не может подконнектится к Серверу, если он запущен как сервис.
В каком направлении вообще стоит искать? Что не так?

Tserver = class(TWSocket)
...
public
procedure Start;
procedure Stop;
...
end;
- эти два метода Сервера работают всегда и везде.

TClient = class(TWSocket)
...
public
procedure Open;
procedure Connect;
...
end;

В клиенте метод Connect вызывается внутри метода Open, но возвращает ошибку в случае, если Сервер запущен из-под сервиса. Если Сервер запущен как простое приложение, все работает замечательно.

Создание экземпляра сервера в обоих случаях одинаково:
Server := TServer.Create(Self);
Server.Start

Родитель у сервера в обоих случаях наследник от TComponent.

Вызов коннекта со стороны клиента

Client := TClient.Create(Self);
Client.IP := sIP; или Client.CompName := sCompName;
Client.Port := nPort;
Client.Open;


здесь указывается IP или имя компьютера, на котором запущен сервер, и его порт.


 
sniknik ©   (2007-10-23 00:29) [1]

> Что не так?
глюк в коде сервиса (того, что сдесь не показан). логический глюк (не то, что при компиляции выявляется)...
например (!!! только пример) не учтено, что сервис это фактически отдельный поток и не сделана обработка сообщений в его "рабочем методе".
ну, или еще чтото аналогичное.


 
Германн ©   (2007-10-23 01:28) [2]


> В клиенте метод Connect вызывается внутри метода Open, но
> возвращает ошибку в случае, если Сервер запущен из-под сервиса.
>

Ну ошибку. А какую? Неужели совсем не понятно, что в вопросе об ошибке стоит процитировать сообщение об этой ошибке?


> Создание экземпляра сервера в обоих случаях одинаково:
> Server := TServer.Create(Self);
> Server.Start
> Родитель у сервера в обоих случаях наследник от TComponent.
>

А это вообще малопонятно. Если под "родителем" подразумевается Parent, то при чём тут сервис, который по определению "безоконный"?


 
umbra ©   (2007-10-23 11:32) [3]

у сервиса нет цикла обработки оконных сообщений, которые нужны для неблокирующих сокетов



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

Текущий архив: 2008.09.14;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.022 c
15-1216318636
@!!ex
2008-07-17 22:17
2008.09.14
Дизайн детей


2-1216308535
Дмитрий Белькевич
2008-07-17 19:28
2008.09.14
Окно - прогресс в отдельном потоке


2-1217770915
mokmoc
2008-08-03 17:41
2008.09.14
TLabel + Paint + Align


15-1216990440
Ruzzz
2008-07-25 16:54
2008.09.14
Delphi - это он, она или оно?


2-1217583545
Vlad Oshin
2008-08-01 13:39
2008.09.14
cxGrid от DevExpress на форме в dll. Не выбирается мышкой строка.