Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2004.05.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.034 c
14-1084512314
faith
2004-05-14 09:25
2004.05.30
Получение введённого символа


3-1083914596
Nikolay M.
2004-05-07 11:23
2004.05.30
OLE DB-провайдер для Sybase ASE - ?


14-1083794584
AlerX
2004-05-06 02:03
2004.05.30
RPG что происходит внутри


14-1084344593
AngelSAI
2004-05-12 10:49
2004.05.30
Hlp


7-1082702338
random
2004-04-23 10:38
2004.05.30
Как отключить Autorun





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский