Привет всем.
Животрепещущий вопрос: возможно ли в консоли присвоить событию сокета (OnRead, например) свою процедуру? Например, Client.onread:=myevent;. Описать её (myevent) получается, а вот присвоить правильно - нет..
![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
![]() ![]() |
![]() |
Unconnected |
![]()
Сообщение
#1
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Привет всем.
Животрепещущий вопрос: возможно ли в консоли присвоить событию сокета (OnRead, например) свою процедуру? Например, Client.onread:=myevent;. Описать её (myevent) получается, а вот присвоить правильно - нет.. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Можно посмотреть, как именно ты ее описываешь, и как пытаешься присвоить?
![]() |
Unconnected |
![]()
Сообщение
#3
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
program Project1; По идее, должно быть server.OnClientRead:=event1(sender,socket);, но ведь в консоли нет понятия Sender, да? ![]() -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
По идее Event1 должен быть методом класса, поскольку в типе TSocketNotifyEvent есть указание:
type TSocketNotifyEvent = procedure (Sender: TObject; Socket: TCustomWinSocket) of object; (2 слова в конце видишь? ![]() Итого, решение тривиальное - обернуть всю работу с сокетом своим классом: typeМожешь еще добавить try/finally, как положено, и создавать сокет в конструкторе класса TFooClass... |
Unconnected |
![]()
Сообщение
#5
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Спасибо, вот так компилируется, ООП сила:)
Только вот будут ли обрабатываться события при таком описании? Я вот ради интереса попробовал в консоли сделать клиентскую и серверную части, просто чтобы можно было передать строку текста с клиента на сервер, вот что получилось. Сервер: program Project1; Клиент: program Project1; Вот на событие OnConnecting обработчик срабатывает, а на OnConnect никак, строка тоже не передаётся, хотя пробовал своим проектом на VCL подсоединиться к консольному серверу - получилось. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Здесь помочь ничем не могу, это надо проверять, а проверять негде: я из-под Debian-а... Как попаду в WinXP - проверю...
|
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Кстати... Вот сюда зайди: http://www.s2.org/flop.html , и посмотри исходники flop2 (предупреждаю сразу, написано на С, но вызовы API-функций они и в Африке вызовы), разбей их на клиент/сервер и пользуйся...
|
Unconnected |
![]()
Сообщение
#8
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата Кстати... Вот сюда зайди: http://www.s2.org/flop.html , и посмотри исходники flop2 (предупреждаю сразу, написано на С, но вызовы API-функций они и в Африке вызовы), разбей их на клиент/сервер и пользуйся... Ну, мне надо чтобы именно через Event'ы обрабатывались все события. Просто с одним человеком поспорил, он утверждал, что это невозможно - сделать запись в консоли client.Onconnect:=event2; и чтобы это вдобавок ко всему работало.. От программы достаточно, чтобы она хотя бы строку пересылала:) -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Звони своему "одному человеку", и требуй с него ящик пива
![]() 1) клиент: // Client 2) сервер: program Project1;Все условия выполняются: все на Эвентах + окно консольное... Класс-Хелперы понадобились для того, чтоб программа была работоспособна на D2009 (без них в Юникодной версии Дельфи принимается совсем не то, что отсылается - баг в исходниках), если у тебя версия ниже 2009, то можешь Class Helper-ы смело убирать, а вместо ReceiveTextAnsi использовать обычный ReceiveText. Проверялось на D2009 + WinXP SP3, работает... Запускается сначала сервер (как всегда), потом - клиент... |
Unconnected |
![]()
Сообщение
#10
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Volvo, спасибо, здорово, это его окончательно добило
![]() ![]() ![]() Цитата Все условия выполняются: все на Эвентах + окно консольное... В выделенной части фразы подвох? ![]() А ещё - мне становится страшно общаться со сверстником, который 14 лет из 16 программирует... -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#11
|
Гость ![]() |
Ну, и что теперь, все, что подключает Windows.pas - будет считаться оконным? Тогда Сокеты вообще нельзя использовать, ибо они тоже там описаны. А консольное - потому, что GetStdHandle(STD_OUTPUT_HANDLE) вернет именно его хендл, а STD_OUTPUT_HANDLE это
Цитата(MSDN) STD_OUTPUT_HANDLE (DWORD)-11 The standard output device. Initially, this is the active console screen buffer, CONOUT$. ( Цитата отсюда: http://msdn.microsoft.com/en-us/library/ms683231(VS.85).aspx ) Претензии есть к MSDN/Microsoft за то, что консольное приложение тоже может обрабатывать очередь сообщений? ![]() Добавлено через 1 мин. Цитата мне становится страшно общаться со сверстником, который 14 лет из 16 программирует... Что же он программировал в 3 года, интересно? Погремушку свою, или соску? Тогда я программирую вообще страшно представить, сколько лет ![]() |
Unconnected |
![]()
Сообщение
#12
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Цитата, ICQ:
Цитата >10 лет паскаля 12 бейсика 5 лет си++ и 2 года ассемблера риальне сделали свое=) (он имел в виду параллельно изучать)>>я за компом с 2-3 непомню когда батя посадил он тоже прогер Причём через некоторое время я понял, что это как минимум наполовину не пустые слова... Бедный парень, света белого не видит.. ![]() Извиняюсь за оффтоп:) -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 28.06.2024 19:07 |