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

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

Как присвоить новій обработчик события


Страницы:   1 2

KyRo ©   (2006-05-04 14:06:00) 

Подскажите.
Я объявляю переменную
Server:TServerSocket;

после чего в коде создаю этот компонент

Server:=TServerSocket.Create(nil);
Server.Port:=9990;
Server.Active:=True;


И я хочу что бы при возникновении события оно происходило в моей процедуре , а не в стандартной .

Я делал так
Server.Socket.OnClientRead:=Connect

Но на в таком случае оно выдает ошибку .

Как можно еще это сделать или обязательно надо создавать потомка ?


KyRo   (2006-05-05 13:58:00) [21]


> Где у тебя на стороне сервера фигурирует конкретный клиент
> ?


Procedure TServerHr.ClientRead(Sender: TObject;Socket: TCustomWinSocket);
 var
s:String;
begin
s:=Socket.ReceiveText;
end;


Вот принимаю я это сообщение которое послал клиент !! Или это не то ?


Сергей М.   (2006-05-05 13:51:00) [22]


> Пытаюсь принять сообщение от клиента


Ок конкретногоклиента, надо понимать ?

И где же, в какой конкретной строчке ты конкретно принимаешь конкретные данные от конкретного клиента ?

Гдеу тебя на стороне сервера фигурирует конкретныйклиент ? Сам-то себе ты в состоянии вразумительно растолковать это ?


KyRo   (2006-05-05 13:25:00) [23]


Server:=TServerSocket.Create(nil);
Server.Port:=9990;
Server.Socket.OnClientRead:=ClientRead;
Server.Socket.OnClientWrite:=ClientWrite;
Server.ServerType:=stTHreadBlocking;
Server.ThreadCacheSize:=10;
Server.Active:=True;

Вот создал сервер
Client:=TClientSocket.Create(nil);
   Client.Port:=9990;
   Client.HOST:='localhost';
   Client.OnRead:=ClientRead;
   Client.OnWrite:=ClientWrite;
   Client.ClientType:=ctBlocking;
   Client.Active:=True;
   Client.Socket.SendText('YES');


Таким образом создал клиент  и послал сообщение

Procedure TServerHr.ClientRead(Sender: TObject;Socket: TCustomWinSocket);
  var
 s:String;
begin
 s:=Socket.ReceiveText;
 end;


Пытаюсь принять сообщение от клиента

 While not Terminated do
     begin
     if Server.Socket.ActiveConnections>0
       then
         begin
          for i := 0 to Server.Socket.ActiveConnections -1  do
            begin
             Server.Socket.Connections[i].SendText('Hello');
            end;
        end;

А таким образом пытаюсь с сервера отправить собщение клиенту.
Клиент принимает сообщение так же само как и сервер.
Так вот эти события OnRead у клиента  OnClientRead у сервера и у клиента не возникают.
Это может быть из за блокирующего режима ? И вообще из за чего они не возникают . Может их нельзя делать методом нити ?


Сергей М.   (2006-05-05 13:18:00) [24]


> KyRo   (05.05.06 13:08) [6]


> ????


!!!!


> что ты имееш ввиду ?


То что "работать с сокетами" вполне может означать и, например, забивание сокетами гвоздей.
А ты что имел ввиду под "работать с сокетами" ?

Может тупить наконец перестанешь и таки приведешь реальный свой код ?


KyRo   (2006-05-05 13:08:00) [25]


> Сергей М. ©   (05.05.06 13:05) [5]
>
> > из за чего это может быть ?
>
>
> Из-за того что "работать с сокетами" - это на деревню дедушке

????
что ты имееш ввиду ?
Я посылаю тест от клиента к серверу и пытаюсь его принять и потом наоборот .
И клиент и сервер у меня блокирующие.


Сергей М.   (2006-05-05 13:05:00) [26]


> из за чего это может быть ?


Из-за того что "работать с сокетами" - это на деревню дедушке


KyRo   (2006-05-05 13:02:00) [27]

Я сделал так
Server:=TServerSocket.Create(nil);
 Server.Port:=9990;
 Server.Socket.OnClientRead:=ClientRead;
 Server.Socket.OnClientWrite:=ClientWrite;
 Server.ServerType:=stTHreadBlocking;
 Server.ThreadCacheSize:=10;
 Server.Active:=True;

где
ClientRead; и ClientWrite; - это

Procedure TServerHr.ClientRead(Sender: TObject;Socket: TCustomWinSocket);
  var
 s:String;
begin
 s:=Socket.ReceiveText;
 end;

объявленые в

TServerHr = class(TThread)
 private
   { Private declarations }
 protected
   procedure Execute; override;
 public
   constructor Create(CreateSuspennded: Boolean);
   procedure   ClientRead(Sender: TObject;Socket: TCustomWinSocket);
   Procedure   ClientWrite(Sender: TObject;Socket: TCustomWinSocket);
 end;


Но когда я начинаю работать с сокетами то эти события не возникают из за чего это может быть ?


MBo   (2006-05-04 14:21:00) [28]

Да, можно, лишь бы прототип совпадал.


KyRo   (2006-05-04 14:10:00) [29]

А если я например в нити создам новый метод и его присвою ?


MBo   (2006-05-04 14:08:00) [30]

обработчик события должен быть не обычной процедурой, а методом объекта(например, формы, если она есть)


Страницы:   1 2

Наверх

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