Привет всем.
Животрепещущий вопрос: возможно ли в консоли присвоить событию сокета (OnRead, например) свою процедуру? Например, Client.onread:=myevent;. Описать её (myevent) получается, а вот присвоить правильно - нет..
Сокеты и консоль |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
Сокеты и консоль |
Unconnected |
Сообщение
#1
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Привет всем.
Животрепещущий вопрос: возможно ли в консоли присвоить событию сокета (OnRead, например) свою процедуру? Например, Client.onread:=myevent;. Описать её (myevent) получается, а вот присвоить правильно - нет.. -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
Сообщение
#2
|
Гость |
Можно посмотреть, как именно ты ее описываешь, и как пытаешься присвоить?
|
Unconnected |
Сообщение
#3
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
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 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Спасибо, вот так компилируется, ООП сила:)
Только вот будут ли обрабатываться события при таком описании? Я вот ради интереса попробовал в консоли сделать клиентскую и серверную части, просто чтобы можно было передать строку текста с клиента на сервер, вот что получилось. Сервер: 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 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата Кстати... Вот сюда зайди: 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 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Volvo, спасибо, здорово, это его окончательно добило Правда, за свой код выдавать не стал, ну для спора это значения не имеет) Вчера он говорил, что если это возможно, то он повесится) А про пиво не получится , чел аж с Новгорода...(иначе сейчас бы меня на форуме не было))) .
Цитата Все условия выполняются: все на Эвентах + окно консольное... В выделенной части фразы подвох? Теперь он прицепился к тому, что TranslateMessage(msg) и DispatchMessage(msg); - это Win32-функции, поэтому приложение не подходит под разряд консольного.. А ещё - мне становится страшно общаться со сверстником, который 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 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Цитата, ICQ:
Цитата >10 лет паскаля 12 бейсика 5 лет си++ и 2 года ассемблера риальне сделали свое=) (он имел в виду параллельно изучать)>>я за компом с 2-3 непомню когда батя посадил он тоже прогер Причём через некоторое время я понял, что это как минимум наполовину не пустые слова... Бедный парень, света белого не видит.. Извиняюсь за оффтоп:) -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
Текстовая версия | 27.04.2024 12:41 |