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

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

TSocketServer без формы [D7, Win2k]


Страницы:   1 2

Obsidee ©   (2007-10-02 13:35:00) 

Когда создаю TSocketServer на форме, кидая компонент, создаю событие OnRead, всё проходит легко и просто.
Но когда создаю в RTTI, то никакие события не вызываются?
что я делаю не так?
простой пример:
unit SS;

interface

uses
 Classes, ScktComp, SysUtils;

type TServerThread = class (TThread)
 private
   SSocket :TServerSocket;
  procedure OnRead (Sender: TObject; Socket: TCustomWinSocket);
 protected
   procedure Execute; override;
 public
   Constructor Create;

end;

implementation

constructor TServerThread.Create;
begin
 inherited Create (false);
 SSocket:=TServerSocket.Create(nil);
 SSocket.Port:=80;
 SSocket.OnClientRead := OnRead;
 SSocket.Active:=true;
end;

procedure TServerThread.Execute;
begin
 inherited;
 self.Priority:=tpLower;
 while not self.Terminated do sleep(1);
 
end;

procedure TServerThread.OnRead(Sender: TObject; Socket: TCustomWinSocket);
var
 s: string;
begin
 s:= socket.ReceiveText;
 Writeln(s);
end;


Obsidee   (2007-10-02 16:22:00) [21]

Невидимое окно, которому слушающее гнездо адресует сообщения о своих событиях, создается неявно при вызове ServerSocket.Open
если оно создаётся, то почему я нечего не получаю?

сделать в Execute ни к чему не приводит

constructor TServerThread.Create;
begin
inherited Create (false);
SSocket:=TServerSocket.Create(nil);
end;

procedure TServerThread.Execute;
begin
inherited;
SSocket.Port:=80;
SSocket.OnClientRead := OnRead;
SSocket.Active:=true;
while not self.Terminated do sleep(1);
end;


Сергей М.   (2007-10-02 16:06:00) [22]


> instance приложение получает в WinMain в качестве параметра


Пардон, WinMain-то его, конечно, получает, но это не имеет никакого отношения к твоей "проблеме".


Сергей М.   (2007-10-02 16:00:00) [23]


> GetMessage (msg, 0,0,0); и GetMessage (msg, Handle,0,0);
>
> ничего не получают


В приведененом тобой коде нет никаких GetMessage.


> чтобы создать hWnd нужен instance


Это не твоя забота.

Невидимое окно, которому слушающее гнездо адресует сообщения о своих событиях, создается неявно при вызове ServerSocket.Open


> instance приложение получает в WinMain в качестве параметра


Ничего подобного)


> в консольном его нет


Кого ?!


Obsidee   (2007-10-02 15:56:00) [24]

да, есть HInstance
получаю с помощью него сообщения
но что с ними делать?


FearG0   (2007-10-02 15:54:00) [25]

http://www.delphimaster.ru/cgi-bin/forum.pl?id=1191102532&n=4

Загляни в эту ветку, там обсуждаем реализацию TClientSocket, но по сути все точь в точь и синтаксис один и тот же практически.


Obsidee   (2007-10-02 15:51:00) [26]

"Ты их у системы не спрашиваешь, вот "оно" их и не принимает."
а оно мне их и не даёт
GetMessage (msg, 0,0,0);и GetMessage (msg, Handle,0,0);
ничего не получают
насколько я знаю, чтобы создать hWnd нужен instance
instance приложение получает в WinMain в качестве параметра
в консольном его нет


Сергей М.   (2007-10-02 15:23:00) [27]


> не думал что это будет иметь значение


Как оказалось - имеет)


> своего Instance не имеет


Любоеприложение имеет свой Instance.

А что он тебя так волнует ? К твоей проблеме это не имеет никакого отношения ...


> windows message не принимает


Ты их у системы не спрашиваешь, вот "оно" их и не принимает.


Obsidee   (2007-10-02 15:15:00) [28]

приложение консольное... не думал что это будет иметь значение
своего Instance не имеет, windows message не принимает...
спасибо
буду выкручиваться


Сергей М.   (2007-10-02 14:12:00) [29]


> как же создать сервер в отдельном потоке правильно?
>


Создавать его можно где угодно.

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

"На огурцах" - активируй/деактивируй свой сервер непосредственно в теле TServerThread.Execute


Obsidee   (2007-10-02 14:04:00) [30]

наверное приплёл rtti изза real-time...
как же создать сервер в отдельном потоке правильно?


Сергей М.   (2007-10-02 13:49:00) [31]


> когда создаю в RTTI


Чавой-то ?

Ты вообще в курсе, что это такое - RTTI ?


> никакие события не вызываются


И не будут "вызываться", поскольку объект класса TServerSocket создается тобой в вызывающемпотоке.


> что я делаю не так?


Абсолютно все.


Страницы:   1 2

Наверх

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