|
Вопрос # 4 063/ вопрос открыт / |
|
Приветствую, уважаемые эксперты!
Есть код с использованием формы и IdTCPServer, как татой код можно реализовать без формы?
Приложение: Переключить в обычный режим- procedure TForm1.IdTCPServer1Execute(AContext: TIdContext);
- var
- stream: TFileStream;
- kod: string;
- begin
-
- kod:=AContext.Connection.Socket.ReadLn;
-
- if kod='666' then
- begin
- AContext.Connection.Socket.WriteLn('6661');
- AContext.Connection.Disconnect;
- end;
-
- if kod='999' then
- begin
-
- stream := TFileStream.Create('C:1.reg',fmOpenRead );
- AContext.Connection.Socket.Write(stream,0,True);
- AContext.Connection.Disconnect;
- stream.Free;
- end;
- end;
 |
Вопрос задал: gm44 (статус: Посетитель)
Вопрос отправлен: 19 апреля 2010, 16:39
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 16; последнее сообщение — 20 апреля 2010, 13:56; участников в обсуждении: 2.
|
Вадим К (статус: Академик), 19 апреля 2010, 17:14 [#1]:
Создать TIdTcpServer динамически? и прицепить один обработчик?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 19 апреля 2010, 17:16 [#2]:
Да именно это мне и нужно!
|
|
gm44 (статус: Посетитель), 19 апреля 2010, 17:17 [#3]:
Вопрос в том как это сделать.?
|
|
Вадим К (статус: Академик), 19 апреля 2010, 17:28 [#4]:
по моему, это же классика.
h:TIdTCPThread;
...
h := TIdTCPThread.Create(nil);
h.OnExecute := IdTCPServer1Execute;
и это вочти все.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 19 апреля 2010, 17:39 [#5]:
А можно по конкретней или примерчик можно? А то я не сталкивался с создадаием обработчиков к динамическим
|
|
gm44 (статус: Посетитель), 19 апреля 2010, 17:41 [#6]:
Очень нужно...
|
|
Вадим К (статус: Академик), 19 апреля 2010, 17:43 [#7]:
гугл дает тоны кода.
искать по пример кнопки и OnClick
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 19 апреля 2010, 18:04 [#8]:
Погуглил про создание TIdTcpServer динамически, там одни вопросы без ответов. Как создать знают а как сделать к нему обработчик не чего вразумительного не отвечают.
|
|
Вадим К (статус: Академик), 19 апреля 2010, 18:10 [#9]:
я же написал, гуглить как создать обоработчик для кнопки, а там по аналогии.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 20 апреля 2010, 12:57 [#10]:
Вадим К, посмотри пожалуйста, что я делаю не так?
Компилятор ругается на строку
procedure IdTCPServer1Execute(AContext: TIdContext);
пишет Unsatisfied forward or external declaration: 'TTCPServer.IdTCPServer1Execute'
type
TTCPServer = class
private
IdTCPServer: TIdTCPServer;
procedure IdTCPServer1Execute(AContext: TIdContext);
protected
public
constructor Create; reintroduce;
destructor Destroy; override;
end;
constructor TTCPServer.Create;
begin
IdTCPServer := TIdTCPServer.create( nil ) ;
IdTCPServer.DefaultPort:=6001;
IdTCPServer.ListenQueue:=15;
IdTCPServer.MaxConnections:=0;
IdTCPServer.TerminateWaitTime:=5000;
IdTCPServer.OnExecute:=IdTCPServer1Execute;
IdTCPServer.Active:=true;
end;
procedure IdTCPServerExecute(AContext: TIdContext);
begin
.........
end;
destructor TTCPServer.Destroy;
begin
IdTCPServer.free;
inherited destroy;
end;
begin
TTCPServer.Create;
end;
|
|
Вадим К (статус: Академик), 20 апреля 2010, 13:09 [#11]:
Если бы создавали автоматом (Нажав Ctrl+Shift+C на определении класса), то сразу поняли ошибку.
вместо
procedure IdTCPServerExecute(AContext: TIdContext);
begin
.........
end;
надо писать
procedure TTCPServer.IdTCPServerExecute(AContext: TIdContext);
begin
.........
end;
Чувствуется?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 20 апреля 2010, 13:29 [#12]:
Спасибо!
|
|
Вадим К (статус: Академик), 20 апреля 2010, 13:32 [#13]:
правда, судя по коду, программа работать не будет она будет сразу закрываться.
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 20 апреля 2010, 13:43 [#14]:
Будет - будет, ни куда не денится 
просто я не весь код написал, чтоб не загромождать...
Там еще присутствует :
var
msg: TMsg;
begin
TTCPServer.Create;
while (GetMessage(msg, 0, 0, 0)) do
begin
translatemessage (msg) ;
dispatchmessage (msg);
end;
|
|
Вадим К (статус: Академик), 20 апреля 2010, 13:49 [#15]:
строка
TTCPServer.Create;
сама по себе тоже плохо. Деструктор автоматом не будет вызван. Это не с++/java.
Второе, а зачем приложение, которое работает в фоне, обработка сообщений, которые ему и так не придут?
Я бы вставил туда ожидание мютекса, который создается и захватывается в конструкторе TTCPServer. А освобождается, когда TTCPServer решит, что хватит, отработал (например, он может получить специальную команду по TCP).
Галочка "подтверждения прочтения" - вселенское зло.
|
|
gm44 (статус: Посетитель), 20 апреля 2010, 13:56 [#16]:
Тоже хороший вариант, только придется с кодом не много пошаманить.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|