Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конфликт recvfrom и sendto в socket. 
:(
    Опции темы
Alexsys128
Дата 23.3.2011, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.5.2010

Репутация: нет
Всего: нет



Доброго времени суток!
Возникла проблема при работе с сокетами.
СИ изучаю не так давно и то больше по примерам и постам на форумах.

Каждую секунду осуществляется отправка датаграммы? которая по умолчанию имеет некоторые параметры. 
Внутри цикла происходит приём и разбор датаграммы и изменение битов датаграммы через время, которая отправляется,
Проблема в следующем - отправка sent() происходит только после "printf("*** Конец операции ***\n");", хотя стоит до и после таймера,
Блокировка в ожидании с recvfrom убрана,
В чём может быть проблема?

Код

    msg[2] |= 1;        // Управление
    msg[3] = 0;
    buf[6]=0;    

void sent()
{
sendto(s2, buf1, sizeof(buf1), 0, (struct sockaddr *)&si_other, slen2);
sleep(1); // раз в секунду
}

while(1) // Прием датаграммы
    {    
    buf1[0] = 1;          // ВМ1
    buf1[1] = 0;          // ПУ
    buf1[2] = 0xDE;       // номер 222
    buf1[3] = 6;          // сумма байт
    buf1[4] = msg[0] = 0x55;        // код начала посылки
    buf1[5] = msg[1] = 0xAA;        // инвертированный код
    buf1[6] = msg[2];    // состояние апппаратуры 3 байт
    buf1[7] = msg[3];    // состояние апппаратуры 4 байт
    buf1[8] = msg[4] = 0;    // резерв
    buf1[9] = msg[5] = (msg[0]%2+msg[1]%2+msg[2]%2+msg[3]%2+msg[4]%2); // контрольная сумма

    recvfrom(s1, buf, sizeof(buf), 0, (struct sockaddr *)&si_me, &slen1);

if((buf[6] == 0))
sent();

        if ((buf[6] &0x1)==1)
        {

        printf("*** Рабочее положение ***\n");
        printf("Запуск насосной станции.\n");
        msg[2] = 0;        // обнуление 3 байта
        msg[3] = 0;        // обнуление 4 байта
        msg[2] |= 1;        // Управление
        msg[2] |= 2;        /
        sent();
        sleep(5);            
        printf("Давление в норме!\n");
        msg[3] |= 8;            // Давление норма
        sent();
        printf("*** Конец операции ***\n");
        buf[6] = 0;
        }
}


Спасибо за помощь!

Это сообщение отредактировал(а) Alexsys128 - 26.3.2011, 23:57
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0369 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.