![]() |
Модераторы: Snowy, Poseidon, MetalFan |
![]() ![]() ![]() |
|
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
Запутался и немогу понять, как можно реализовать добавление нового Event в компоненты TClientServer, TServerClient
Есть стандартные seRead,seconnect и т.п. Где и как можно реализовать добавление новой команды. Спасибо за внимание. |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
||||
|
||||
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
Я вообще то и говорю про ScktComp.pas
как можно реализовать добавление команды в TSocketEvent |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
||||
|
||||
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
Допустим мне нужна новая команда.
client отправляет эту комнду сервер должен принять и установить чтение команды. event(self,seCommand); Хорошо, как работает система отправки TSocketNotifyEvent. Client отправил сообщение, а на server приходит сообщение через чтение TSocketNotifyEvent. Так вот вопрос, как мне сделать тоже самое? С другой командой. |
|||
|
||||
kami |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Стоп. Не нужно путать возникновение событий в результате соединения/приема/передачи трафика и сам трафик. Передача чего-либо клиентом на сервер и наоборот - это трафик, никоим образом не относящийся к событиям TCustomWinSocket.
Если клиент что-то отправил, то на сервер в любом случае что-то придет (всякие разрывы соединения в расчет не берем). Что конкретно пришло на сервер можно выяснить при обработке seRead. Добавлено @ 21:50 Чуть оффтопика: Это утверждение или вопрос? Если утверждение, то соглашусь - действительно, хорошо-то как работает ![]() Это сообщение отредактировал(а) kami - 5.2.2010, 21:51 |
||||
|
|||||
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
То есть добавить событие я не смогу?
Вообще вопрос, в том что мне нужно принимать и сообщения, и буфер одновременно. По-этому я хотел добавить чтение нового события seReadText. |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Для сетевых компонентов глубоко симметрично, что через них передается - строки, буферы памяти, различные потоки - всё воспринимается как чистые данные. Сетевые компоненты не знают (и не должны), какими были исходные данные. Более того, они даже не знают при приеме их размер (попробуйте отправить в соединение '123' и следующим оператором '456'. На приеме Вы получите (скорее всего) '123456' - за ОДНО событие OnRead). Как интерпретировать входящий трафик(т.е. какой взять приемный буфер) - это Ваша проблема, и задаваться она должна определением Вашего (пользовательского) протокола обмена. И никакие добавления seReadText, seReadFile здесь не помогут, т.к. (повторюсь еще раз) - для сокетов все, что пришло это чистый поток данных. Определяйтесь с тем, что пришло из соединения в предназначенных для этого событиях. Добавлено через 1 минуту и 59 секунд Добавить - сможете. Но кто будет его вызывать? Кто и Как определит, что нужно seReadText, а не seRead? Ну и - |
|||
|
||||
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
Вопрос изначально, что означает вот эта установка:
property OnClientConnect: TSocketNotifyEvent read FOnClientConnect write FOnClientConnect; property OnClientConnect: TSocketNotifyEvent index 2 read GetOnClientEvent write SetOnClientEvent; Откуда мы получаем событие? И что значит этот код: OnClientConnect: TSocketNotifyEvent Это сообщение отредактировал(а) 2134 - 14.2.2010, 12:55 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
см. TCustomWinSocket.CMSocketMessage Не понял вопроса. Если вопрос про то, как назначаются события, то увы - не ко мне. Не смогу прочитать курс лекций по объявлению, назначению и использованию методов, про различные уровни видимости, абстрактные, виртуальные и динамические методы. |
|||
|
||||
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
Не могу понять, в ваших словах нет помощи, к чему они вообще?
Как например: "У вас знаний не хватает" - Я и сам прекрасно понимаю, что у меня их не хватает, вот я и пытаюсь найти ответ в поставленной для меня задаче. А так, как было выше написано, спасибо за внимание. TCustomWinSocket.CMSocketMessage - как я заметил уже два дня назад, это работа с клиентом, а мне нужна работат с сервером. Это сообщение отредактировал(а) 2134 - 6.2.2010, 02:22 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Вы хотите влезть в исходники VCL. Это хорошо, но чревато, о чем я уже писал. На один из вопросов, а именно - я ответ дал. Остальные не понял, о чем честно и написал. Что означают события - имхо, ясно из их названия. Как они назначаются - всё начинает "плясать" от процедуры InitSocket. Если смущают индексы - то это к справке, ибо относится к синтаксису Delphi, а никак не к конкретным компонентам. Добавлено через 4 минуты и 57 секунд
TCustomWinSocket используется и в клиенте, и в сервере. Ибо является предком TClientWinSocket и TServerWinSocket. Более того, в каждом событии TServerSocket одним параметром идет TCustomWinSocket, который является хозяином соединения, вызвавшего событие. Это сообщение отредактировал(а) kami - 6.2.2010, 02:30 |
|||
|
||||
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
Как они назначаются - всё начинает "плясать" от процедуры InitSocket.
Тут и так понятно, что назначается асинхронное соединение с клиентом. Как и где я смогу понять, какое событие делает клиент и в какой момент я смогу получить это событие, в точности узначть, что за событие и обработать его. В пределах: property OnClientRead: TSocketNotifyEvent index 0 read GetOnClientEvent write SetOnClientEvent; Все и обрывается, а дальше не могу понять, как мы узнали, что потребовали запрос на это событие: 1) Кто потребовал запрос. 2) Что за событие. Вот все, что я и хочу узнать, а остальное, обработать это событие назначить ему применение, доделаем. У меня почти вся программа написана, а из-за этой проблемы ломаю голову 3 день Добавлено @ 02:46 Извиняюсь, но теперь я начал понимать, спасибо. Я изначально не дал большего значения вот этому. Это сообщение отредактировал(а) 2134 - 14.2.2010, 12:55 |
|||
|
||||
kami |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Пойдем сначала: когда в открытое в нашем серверном сокете соединение пришли данные, система (Windows) отправила CustomWinSocket-у, ответственному за это соединение (точнее, его окну) сообщение. CustomWinSocket поймал его в процедуре CMSocketMessage. Дальше пошла его обработка (берем сообщение о том, что что-то пришло из сети): 1. Вызывается процедура Read 2. В ней Event(Self, seRead); 3. Оттуда оно "перенаправляется" в TServerWinSocket.ClientEvent 4. В TServerWinSocket.ClientEvent вызывается ClientRead 5. Из ClientRead попадаем в TServerSocket.OnClientRead, а оттуда - в Ваш код. |
|||
|
||||
2134 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 11.1.2010 Репутация: нет Всего: нет |
Вопрос, как я могу добавить сообщение для чтения?
Добавлено @ 02:57
Да это я уже понял, спасибо. Вы решили все эти проблемы с сервером. А то меня это уже начало пугать, как мы можем получать событие из пустоты, прям камень с груди. Это сообщение отредактировал(а) 2134 - 6.2.2010, 02:59 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Сети" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |