![]() |
|
|
![]()
|
|
| Sharkfire |
|
||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Написал класс TMyUDP:
Его Код:
Его ХЄД:
Использую класс так:
100% что в момент испытания мой айпи 127.0.0.1 но пакеты не доходяд, или доходяд? но я об этом не знаю!!! В чём трабла, помогите плиз!!!!?? |
||||||
|
|||||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 1 Всего: 11 |
Не уловил общей концепции, но трабла по моему именно здесь:
WSAAsyncSelect(WinSocket,NULL,WM_SOCKET,FD_READ|FD_WRITE|FD_ACCEPT|FD_CONNECT|FD_CLOSE) 1. WSAAsyncSelect() автоматически переводит сокет в неблокирующий режим, и дальнейшие действия с сокетом должны это учитывать 2.Что делает WSAAsyncSelect(WinSocket,NULL,WM_SOCKET.............)? Она указывает, какому окну посылать данное сообщение при наступлении перечисленных сетевых событий. У вас этот параметр - hWnd окна равен NULL - те посылает в никуда 3.Событий |FD_ACCEPT|FD_CONNECT|FD_CLOSE в UDP нет - это из TCP - там есть только FD_READ|FD_WRITE 4. Если всетаки хочется ее использовать, то в консольном безоконном приложении создается скрытое Windows-окно, кому и посылается сообщение. 5. Лучше всего в вашем случае использовать проcтую функцию select() c бесконечным таймаутом, те ждем пока чтото не прийдет |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: нет Всего: 58 |
Олег2005,
ой какая муть. извините, не сдержался |
|||
|
||||
| mrbrooks |
|
|||
![]() трололомен ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4259 Регистрация: 4.10.2006 Где: Дол Гулдур Репутация: 167 Всего: 306 |
Как ща помню UDP такой протокол который и не дает гарантии что данные дойдут
Но это лирика. Попробуй просто написать клиента и посмотри какие данные приходят и приходят ли вообще. Это сообщение отредактировал(а) mrbrooks - 7.11.2007, 12:32 |
|||
|
||||
| Олег2005 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 1 Всего: 11 |
Ну что ж, давайте по пунктам: 1.2 MSDN
Теперь пункт 3 Из http://groups.google.com/group/microsoft.public.vc.language/
FD_CONNECT - вы его можете получить только в случвае прибитого сокета, на котором выполнился connect вместо bind - но в как раз сокет биндите а не коннектите Все дальнейшее - очевидно Так что жду ваших комментариев - може вы гуру почище Стивенса??? PS1 Может я и не так силен в объектно-ориентированном программировании, но курс сетевого программирования я читаю уже лет 10 - и уж кое-что там знаю А семь моделей сетевого I/O в Виндах, включая и I/O Completion Port - знаю назубок PS2 Хотя..... вдруг вы что-то новое открыли? Не жадничайте, расскажите - я учусь с удовольствием Это сообщение отредактировал(а) Олег2005 - 7.11.2007, 13:10 |
||||
|
|||||
| xvr |
|
||||||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Жуть!
И собственно почему все не работает:
Это сообщение отредактировал(а) xvr - 7.11.2007, 16:51 |
||||||||
|
|||||||||
| Sharkfire |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Так а чо мне делать то?? Вы тут так красиво раскритиковали мой код (кстате все материалы для него взяты с форума єтого) а что надо конкретно исправить не сказазли???!! Кулас будет использоватся тольком моей программой и тольков среде C++ Builder 2006 Это сообщение отредактировал(а) Sharkfire - 7.11.2007, 16:39 |
|||
|
||||
| Олег2005 |
|
||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 1 Всего: 11 |
Ну вот это уже ближе к истине:
Добавлено @ 16:52
Он задал пользовательское сообщение: #define WM_SOCKET WM_USER+400 Обычно правда пишут #define WM_SOCKET WM_USER+1 Вот вам пример юниксовых клиент/сервер - переделайте и будет вам счастье
Добавлено через 9 минут и 27 секунд Я так и не понял, к кому это относилось????????????????? Это сообщение отредактировал(а) Олег2005 - 7.11.2007, 16:55 |
||||||||||||
|
|||||||||||||
| Sharkfire |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Спасибо канеша за инфу.... но я такине понял что мне делать!!
Мне нужен прост работающий класс... |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
Для начала надо определиться ГДЕ вы собираетесь принимать свои UDP пакеты: Если вы хотите использовать WSAAsyncSelect, то вам нужно окно, которое будет принимать нотификационные сообщения (это может быть любое окно - например главная форма приложения или любая другая), и BEGIN_MESSAGE_MAP/END_MESSAGE_MAP нужно будет вставить в тело именно этой формы. Handle окна можно будет достать через проперть Handle Если вы хотите просто читать из сокета (блокирующе), то вам придется создать для этого thread (см TThread) |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 1 Всего: 11 |
Ну я бы сказал - потоки ему ни к чему - в моем примере чистые блокирующие сокеты - надо только все с умом переделать - комментов в проге много - в соответствии со схемой взаимодействия - аттач Присоединённый файл ( Кол-во скачиваний: 9 )
Doc2.doc 23,00 Kb |
|||
|
||||
| Sharkfire |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Ок. Я собсвенно чо сел писать свой класс не от нефиг делать!
У меня обычный TUdpSocket не пашет када RemotePort = LoaclPort и я шлю пакет на свой IP. Та же самая прога .... на TNMUdp пашет!! на теже порты!!! |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 48 Всего: 223 |
TUdpSocket клиент, а тебе нужен сервер :( Если ты не хочешь органически вплетать код обслуживания сокета во все остальное приложение и не хочешь делать оконный компонент, который мог бы получать нотификации через WSAAsyncSelect, то остается только TThread (TTcpServer использует ее) Посмотри на исходник в присоединенном файле Это сообщение отредактировал(а) xvr - 9.11.2007, 00:07 Присоединённый файл ( Кол-во скачиваний: 6 )
1.cpp 2,77 Kb |
|||
|
||||
| Sharkfire |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 236 Регистрация: 30.11.2006 Где: Одесса Репутация: 2 Всего: 2 |
Да не очень я хочу так віворачиватся... почему то в 6-м билдере ... этой проблемы не было....
и я так понимаю.. что понятия "сервер" нет в UDP т.к как нет факла подключения. Ппоробую порыцца в вашем примере , спасибо..... P.S. Кстате, соеденил мой класс с окном,
сделал всё как сказали... при запуске пишет стэковерфлоу на строке END_MESSAGE_MAP(TForm6) |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 1 Всего: 11 |
Нет, это неверно Понятие UDP-сервера есть - я ведь высылал схему взаимодействия UDP-сервер запускается и висит на recvfrom() - ждет, когда кто-то пришлет какой запрос и отвечает sendto() - если надо. Типичный UDP-сервер - это DNS-сервер |
|||
|
||||
![]()
|
| Правила форума "С++ Builder" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C++ Builder | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |