![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
написание компонента от 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
Думаешь, все сразу догадались, как именно ты это делаешь?