Главная страница
    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-1083939526
ИМХО
2004-05-07 18:18
2004.05.30
Что лучше: узкий специалист или дилетант с "широким" кругозором?


3-1083836197
Pul
2004-05-06 13:36
2004.05.30
DBGrid и редактирование lookup полей


1-1084811766
Барский Олег
2004-05-17 20:36
2004.05.30
Как сделать окно программы прозрачным?


11-1073215291
Neznaika
2004-01-04 14:21
2004.05.30
Draw в KOL


6-1081854176
Сережа550
2004-04-13 15:02
2004.05.30
Скролл в TWebBrowser





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский