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

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

Как назначить обработчик события сокету [D5, WinXP]


Страницы:   1 2

TButton ©   (2004-04-14 12:49:00) 

В продолжение предыдущей темы (закрыта). В порядке тренировки пишу прогу.

program Project1;
{$APPTYPE CONSOLE}
USES
 SysUtils,
 scktcomp;
procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin

end;

VAR
 gate: TServerSocket;
BEGIN
 gate:=TServerSocket.Create(nil);
 Writeln('Socket created.');
 gate.Port:=7000;
  gate.OnClientConnect:=ClientConnect;
 Writeln('Socket initialized.');
 gate.Open;
 Writeln('Socket opened.');
 gate.Free;
 Writeln('Socket destroyed.');
 Write('Press Enter'); Readln;
END.


компиляю. компилятор показывает на выделеную строку и говорит "[Error] Project1.dpr(17): Incompatible types: method pointer and regular procedure" я понимаю что как-то неправильно задекларировал процедуру, а как сделать это правильно никак не пойму.


TButton   (2004-04-14 20:34:00) [1]

<оффтопик>
ладно. на сегодн все, и думаю все на долго. с утра провайдер проснется, сладко потянется и хладнокровно щелкнет моим рубильником ~ на месяц лишив меня радости общения с вами. а ведь еще столько нужно узнать... но здоровье дороже.
</оффтопик>


Verg   (2004-04-14 20:29:00) [2]


> TButton ©   (14.04.04 20:26) [20]


Спроси в WinAPI - 4-ый кабинет направо.

А в полчетвертого утра я даже прогноз погоды плохо понимаю....


TButton   (2004-04-14 20:26:00) [3]

re 19
вообще-то вместо длинной ссылки можно было сказать "посмотри в хелпе". в хелпе я посмотрел, но то ли язык подзабыл, то ли потому что уже пол четвертого утра и очень хочется спать, ничего не понял. надеялся от вас, сэр, услышать немного русских слов которые в общих чертах осветили бы суть проблемы.


Verg   (2004-04-14 20:23:00) [4]

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/messagesandmessagequeuesreference/messagesandmessagequeuesfunctions/getmessage.asp


TButton   (2004-04-14 20:09:00) [5]

Удалено модератором
Примечание: Оффтоп...


Verg   (2004-04-14 20:06:00) [6]

Удалено модератором
Примечание: Оффтоп...


TButton   (2004-04-14 20:06:00) [7]

re 13
большое спасибо, сэр. кажется я начинаю вникать. не могли бы вы на последок коротенько объяснить что возвращает GetMessage?


TButton   (2004-04-14 19:58:00) [8]

Удалено модератором
Примечание: Оффтоп...


Verg   (2004-04-14 19:51:00) [9]

Удалено модератором
Примечание: Оффтоп...


Verg   (2004-04-14 19:48:00) [10]

var Msg : TMsg;

while GetMessage(Msg, 0,0,0) do
 DispatchMessage(Msg);


TButton   (2004-04-14 19:16:00) [11]

Удалено модератором
Примечание: Оффтоп...


Fay   (2004-04-14 19:10:00) [12]

Удалено модератором
Примечание: Оффтоп...


TButton   (2004-04-14 19:08:00) [13]

re 8
нет, конечно не тайна
в Form1:TForm1
объявляется procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
это процедура назначается для обработки события onConnect компонента ServerSocket1:TServerSocket
у формы получается ее назначить, у меня нет, пытался узнать как она это делает... но она прячет этот момент, только в DFMке есть строчка onClientConnect = ServerSocket1ClientConnect

re 9
у меня тоже возникла эта мыль. а вы не подскажете как именно это сделать, поскольку я раньше подобным не занимался.


Verg   (2004-04-14 18:48:00) [14]


> TButton ©   (14.04.04 18:42) [7]


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


VMcL   (2004-04-14 18:46:00) [15]

>>TButton ©  (14.04.04 18:42) [7]

Что именно не получается, можно поинтересоваться? Или это военная тайна? Где клиент, что он делает?


TButton   (2004-04-14 18:42:00) [16]

извините, всеравно не помогает =(
интересно, почему у формы получается, а у меня нет... 100% что-то не так делаю...


TButton   (2004-04-14 18:37:00) [17]

пардон, запамятовал. сию минуту поправим-с =)


VMcL   (2004-04-14 18:18:00) [18]

>>TButton ©  (14.04.04 18:16) [4]

Еще раз внимательно см. [3]. Не находишь разницы с [4]?


TButton   (2004-04-14 18:16:00) [19]

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

re 2, 3
извините, но ваш метод дал те же результаты. или я что-то не так делаю


program Project1;
{$APPTYPE CONSOLE}
USES
 SysUtils,
 scktcomp;

VAR
 gate: TServerSocket;
 b: boolean;
 onConnect: TMethod;

procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 Socket.SendText('Acepted.'+#13#10);
 Writeln(Socket.RemoteAddress, Socket.LocalAddress);
 b:=true;
end;

BEGIN
 onConnect.Code:=@ClientConnect;
 onConnect.Data:=nil;
 gate:=TServerSocket.Create(nil);
 Writeln('Socket created.');
 gate.Port:=7000;
 gate.OnClientConnect:=TSocketNotifyEvent(onConnect);
 Writeln('Socket initialized.');
 gate.Open;
 Writeln('Socket opened.');
 // main loop
 b:=false;
 repeat

 until b;
 // end
 gate.Free;
 Writeln('Socket destroyed.');
 Write('Press Enter'); Readln;
END.


VMcL   (2004-04-14 13:27:00) [20]

Ой, забыл, ещё нужно процедуру по-другому определить:
procedure ClientConnect(Dummy: Pointer; Sender: TObject; Socket: TCustomWinSocket);


Страницы:   1 2

Наверх

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