crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Multicast в FreeBSD
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
RaZeR Дата 9.8.2011, 14:54
  Здравствуйте.

Нашел в инете примеры по использованию multicast в Qt. Под виндой все прекрасно работает, попытался перенести под FreeBSD, прием сообщений все также прекрасно работает, а при попытке отправки выдает:
qDebug("error() %d\n", udpSock->error());
qDebug("Error: %s\n", qPrintable(udpSock->errorString()));
qDebug("bytes written %d", bytesWritten);

Цитата
error() 7
Error: Unable to send a message
bytes written -1


//инициализация
//#define _WIN_
#define _FREEBSD_ 

#ifdef _WIN_
#include <ws2tcpip.h>
#include <winsock2.h>
#endif

#ifdef _FREEBSD_
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#endif

---------------------------------------------------------------------------------
UDP::UDP(char *MULTICAST_IP, int MULTICAST_PORT)
{
#ifdef _DEBUG_
    qDebug("Create UDP Socket\n");
#endif

    addrIP.setAddress(MULTICAST_IP);
    addrPort = MULTICAST_PORT;

    udpSock = new QUdpSocket(this);
    bool state = udpSock->bind(QHostAddress::Any, addrPort, QUdpSocket::ShareAddress | QUdpSocket::ReuseAddressHint);

    struct ip_mreq mcast;
    int opt = 1;                                        // 0, если на собственный адрес отправлять не нужно
    int ttl = 1;
    int sd = udpSock->socketDescriptor();
    memset(&mcast, 0, sizeof(struct ip_mreq));
    mcast.imr_multiaddr.s_addr = inet_addr(qPrintable(addrIP.toString()));
    mcast.imr_interface.s_addr = htonl(INADDR_ANY);
    setsockopt(sd, IPPROTO_IP, IP_MULTICAST_LOOP, (const char *)&opt, sizeof(int));
    setsockopt(sd, IPPROTO_IP, IP_MULTICAST_TTL, (const char *)&ttl, sizeof(ttl));
    setsockopt(sd, IPPROTO_IP, IP_MULTICAST_IF, (const char *)&mcast.imr_interface.s_addr, sizeof(mcast.imr_interface.s_addr));
    setsockopt(sd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char *)&mcast, sizeof(mcast));

    if(udpSock->socketDescriptor() == -1 || !state)
    {
        delete udpSock;
        return;
    }

    connect(udpSock, SIGNAL(readyRead()), this, SLOT(recv_UDPData()));
}


//отправка
int UDP::send_UDPData(char *buf, int size)
{
    QByteArray data = QByteArray(buf, size);

#ifdef _DEBUG_
    qDebug("Data: %s", data.data());
#endif

    bytesWritten = udpSock->writeDatagram(data, addrIP, addrPort);

#ifdef _DEBUG_
    qDebug("error() %d\n", udpSock->error());
    qDebug("Error: %s\n", qPrintable(udpSock->errorString()));

    qDebug("bytes written %d", bytesWritten);
    qDebug("Send UDP Compleate\n");
#endif

    return bytesWritten;
}


Кто-нибудь может подсказать, в чем может быть проблема с отправкой мультикаст пакета?
Qt 4.7, FreeBSD 8
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 4.7.2025, 22:55