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

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

написание компонента от TClientSocket [D7, XP]


Ezorcist ©   (2006-06-01 09:16:00) 

Заменяю стандартную процедур Event. Подключаюсь, вызываются события OnConnecting, OnConnect и т.д. Потом нажимаю на кнопку с обработчиком ClientSocket1.Socket.SendText('...'); Но в Event программа даже не приходит. Почему?


Ezorcist   (2006-06-06 21:23:00) [1]

Спасибо kami.
Спасибо Сергей М.

Буду думать и делать.. )) скоро опять полезу с вопросами))


kami   (2006-06-05 21:32:00) [2]

Ezorcistнас рассудит :)


Сергей М.   (2006-06-05 10:34:00) [3]


> kami ©   (05.06.06 10:32) [14]


"Потороха" scktcomp мне хорошо знакомы.


kami   (2006-06-05 10:34:00) [4]

Ну и - я же не сказал, что предложенное мной - единственно возможный вариант.


kami   (2006-06-05 10:32:00) [5]

Сергей М. ©   (05.06.06 10:27) [12]
А зря - посмотрите внимательнее код TServerSocket(особенно конструктор) и увидите. Заодно - и TServerWinSocket


kami   (2006-06-05 10:30:00) [6]

Ах, да - чуть не забыл - придется прописать в опции проекта в Directories/Conditionals путь к этому ScktComp, или, что лучше - оставить в ..\sources\vcl\стандартный, а измененный - поместить в папку с исходниками своей программы.
Опять - IMHO :))


Сергей М.   (2006-06-05 10:27:00) [7]


> kami ©   (05.06.06 10:18) [11]


Я не вижу никакого резона ни реализовывать наследников этих компонентов ни переделывать их код.


kami   (2006-06-05 10:18:00) [8]

Сергей М. ©   (05.06.06 8:40) [10]
Разницы нет никакой

Не совсем - в TServerSocketсоединениями занимается FServerSocket:TServerWinSocket

Если это очень сильно нужно, то придется влезть в юнит ScktComp :
1.подправить TServerWinSocket:
- добавить дополнительно в public секцию:
    myClientEvent:TSocketNotifyEvent;
- изменить TServerWinSocket.ClientEvent, добавив (перед или после Case)
  if Assigned(myClientEvent) then
   myClientEvent(Sender,Socket,SocketEvent);


2. Написав наследника от ServerSocket(перекрывать Eventне нужно), добавить в описание класса
  procedure myClientEvent(Sender: TObject; Socket: TCustomWinSocket;SocketEvent: TSocketEvent);
 в конструкторе своего компонента:
constructor Create...
begin
 inherited Create(...);
 Socket.myClientEvent:=myClientEvent;
 // свои инициализации
end;

Таким образом, мы не нарушаем работу стандартного TServerWinSocket ( если это событие не будет определено, соответственно, ничего лишнего вызываться не будет) и в то же время имеем возможность в myClientEvent обрабатывать события от клиентов.
Вроде так, возможно, есть варианты гораздо проще :)


Сергей М.   (2006-06-05 08:40:00) [9]

Точно так же.

Разницы нет никакой - и TServerSocket и TClientSocket есть наследники TAbstractSocket.


Ezorcist   (2006-06-05 08:13:00) [10]

??


Ezorcist   (2006-06-04 17:18:00) [11]

-


Ezorcist   (2006-06-04 12:34:00) [12]

Понятно, ещ вопрос (у меня два дочерних компонента от TServerSocket и от TClientSocket):

Как обработать данные, пришедшие серверу? в компоненте (в обоих) писал

 protected
   procedure Event(Socket: TCustomWinSocket; SocketEvent: TSocketEvent); override;

Но при посылке данных ClientSocket1.Socket.SendText(...) и ServerSocket1.Socket.Connections[0].SendText(..,)

событие seRead вызывается только на клиенте. А как с сервером?


kami   (2006-06-03 16:07:00) [13]

Неправильно
Нужно:
ServerSocket.Socket.Connections[i].SendText

Это во первых.
Во вторых:
seRead возникнет, когда какие-либо данные будут получены(а не отосланы) сокетом.
seWrite будет тогда, когда захочет: оно сигнализирует, что "отправочный" буфер сокета освободился, то есть можночто-либо отправлять.


Ezorcist   (2006-06-03 08:19:00) [14]

ServerSocket1.Socket.SendText('...');
Ой, описался(( Вот так правильно. они соединены.


Ezorcist   (2006-06-02 18:18:00) [15]

???


Ezorcist   (2006-06-01 18:21:00) [16]

2Сергей М.
Ну, может быть seRead?


Сергей М.   (2006-06-01 10:16:00) [17]


> в Event программа даже не приходит


И какое, по-твоему, событие должно при этом возникнуть ?


MBo   (2006-06-01 09:26:00) [18]

>Заменяю стандартную процедур Event

Думаешь, все сразу догадались, как именно ты это делаешь?


Наверх

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