Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
3-1146248560
comtat
2006-04-28 22:22
2006.06.25
удаленная бд (коннект)


15-1148984742
Nic
2006-05-30 14:25
2006.06.25
Курсовик по VBA ...


4-1143058142
Alex_PP
2006-03-22 23:09
2006.06.25
Почему виснет FindWindow(nil, dialog window ) в функции ловушки?


2-1149683585
Тимофей Юрьевич
2006-06-07 16:33
2006.06.25
помогите разобраться как лучше?


3-1146298835
John Magic
2006-04-29 12:20
2006.06.25
автоматическая нумерация строк в DBGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский