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

Вниз

Как назначить обработчик события сокету   Найти похожие ветки 

 
TButton ©   (2004-04-14 12:49) [0]

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

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" я понимаю что как-то неправильно задекларировал процедуру, а как сделать это правильно никак не пойму.


 
BlackTr   (2004-04-14 13:10) [1]

Создать обьект ?


type
 TServer = class( TObject )
 private
   procedure ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
 end;

implementation

procedure TServer.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
...
end;

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

Хотя... Может есть еще решение ?


 
VMcL ©   (2004-04-14 13:25) [2]

>>TButton ©  (14.04.04 12:49)

Или кул-хацкерский метод:

var
 OnChegotoTam: TMethod;
...

OnChegotoTam.Code := @ClientConnect;
OnChegotoTam.Data := nil;
Gate.OnClientConnect := TSocketNotifyEvent(OnChegotoTam);


 
VMcL ©   (2004-04-14 13:27) [3]

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


 
TButton ©   (2004-04-14 18:16) [4]

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 18:18) [5]

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

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


 
TButton ©   (2004-04-14 18:37) [6]

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


 
TButton ©   (2004-04-14 18:42) [7]

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


 
VMcL ©   (2004-04-14 18:46) [8]

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

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


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


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


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


 
TButton ©   (2004-04-14 19:08) [10]

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

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


 
Fay ©   (2004-04-14 19:10) [11]

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


 
TButton ©   (2004-04-14 19:16) [12]

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


 
Verg ©   (2004-04-14 19:48) [13]

var Msg : TMsg;

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


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

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


 
TButton ©   (2004-04-14 19:58) [15]

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


 
TButton ©   (2004-04-14 20:06) [16]

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


 
Verg ©   (2004-04-14 20:06) [17]

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


 
TButton ©   (2004-04-14 20:09) [18]

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


 
Verg ©   (2004-04-14 20:23) [19]

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


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

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


 
Verg ©   (2004-04-14 20:29) [21]


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


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

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


 
TButton ©   (2004-04-14 20:34) [22]

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



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

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

Наверх




Память: 0.52 MB
Время: 0.023 c
14-1084156747
TGero
2004-05-10 06:39
2004.05.30
TImage - ничто, Delphi - все!


1-1084723276
Федя Мегатронов
2004-05-16 20:01
2004.05.30
Скорость закачки - как ?


14-1084450044
Ш-К
2004-05-13 16:07
2004.05.30
Видеозахват


3-1084367422
Pul
2004-05-12 17:10
2004.05.30
Сортирвка по Blob полю


1-1084863068
webpauk
2004-05-18 10:51
2004.05.30
Много окон