Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение/посылка сообщений  (Прочитано 8550 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Junk
Гость
« : 11-07-2006 12:34 » 

Есть функция обработки сообщений от сокета

LRESULT OnSocketOperation(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL&)

если что-то пришло, вызывается код
switch(WSAGETSELECTEVENT(lParam))
 {
   case FD_READ:

Далее идет обработка принятого сообщения. Но при запуске программа часто зависает.
Возможно, что на сокет приходит много сообщений, кот. программа не успевает обрабатывать.
Что нужно сделать, чтобы сообщения не терялись и обрабатывались по мере поступления?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 11-07-2006 12:46 » 

Junk, Во первых, что за сокет (UDP, TCP)? Во вторых, висит ли он на прослушивании, или ты делаеш запрос, потом получаеш ответ?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Junk
Гость
« Ответ #2 : 11-07-2006 13:05 » 

да это все те icmp-пакеты.
Делаю запрос, жду ответа.
Дело в том, что запросы посылаются на требуемые адреса в цикле и, видно, и приходят также скопом
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #3 : 11-07-2006 13:08 » 

Кстати заведи прогу Ethereal. Мне сказали, что под винду она тоже сушествует и распространяется бесплатно. Эта прога дает возможность отслеживать все пакеты поступаюшие на сетевое устройство.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 11-07-2006 13:19 » 

Сама система не может определить, кому принадлежит icmp пакет. Поэтому она отсылает пакет абсолютно всем открытым icmp сокетам. Твоя задача определить, твой это пакет или нет. Задержка может происходить на recvfrom. Когда на сокете нет еше сообшения. Поэтому в своем коде я переводил сокет в неблокируюший режим. Если нет сообшение, то программа продолжает работать дальше, только длина принятого сообшения равна нулю и WSAGetLastError даст код ошибки WSAEWOULDBLOCK. Описание работы в неблакируюшем режиме есть в статье https://club.shelek.ru/viewart.php?id=153
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines