Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Конфликт recvfrom и sendto в socket.


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

Каждую секунду осуществляется отправка датаграммы? которая по умолчанию имеет некоторые параметры. 
Внутри цикла происходит приём и разбор датаграммы и изменение битов датаграммы через время, которая отправляется,
Проблема в следующем - отправка 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;
        }
}


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

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)