Форум: "Начинающим";
Текущий архив: 2006.06.25;
Скачать: [xml.tar.bz2];
Внизнаписание компонента от 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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.009 c