Текущий архив: 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.5 MB
Время: 0.041 c