Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.06.25;
Скачать: CL | DM;

Вниз

написание компонента от TClientSocket   Найти похожие ветки 

 
Ezorcist   (2006-06-01 09:16) [0]

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


 
MBo ©   (2006-06-01 09:26) [1]

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

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


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


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


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


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

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


 
Ezorcist   (2006-06-02 18:18) [4]

???


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

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


 
kami ©   (2006-06-03 16:07) [6]

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

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


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

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

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

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

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

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


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

-


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

??


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

Точно так же.

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


 
kami ©   (2006-06-05 10:18) [11]

Сергей М. ©   (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 10:27) [12]


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


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


 
kami ©   (2006-06-05 10:30) [13]

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


 
kami ©   (2006-06-05 10:32) [14]

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


 
kami ©   (2006-06-05 10:34) [15]

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


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


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


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


 
kami ©   (2006-06-05 21:32) [17]

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


 
Ezorcist   (2006-06-06 21:23) [18]

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.06.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.047 c
4-1143058142
Alex_PP
2006-03-22 23:09
2006.06.25
Почему виснет FindWindow(nil, dialog window ) в функции ловушки?


2-1149600623
VitV
2006-06-06 17:30
2006.06.25
interbase+delphi связывание таблиц


4-1142613185
AndreyRus
2006-03-17 19:33
2006.06.25
Аналог IOCTL_SCSI_RESCAN_BUS в Windows 2003


1-1147839082
WhiteGuy
2006-05-17 08:11
2006.06.25
Telnet


2-1149439102
parovoZZ
2006-06-04 20:38
2006.06.25
Стиль кнопки