Официальный форум СВД Встраиваемые Системы
03 Декабря, 2016, 18:41:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не биндится порт  (Прочитано 405 раз)
_Cepera_
Пользователь

Сообщений: 38


« : 11 Января, 2016, 13:37:47 »

Не выполняется bind, в чем могут быть проблемы? Может что то в qnx блокирует?  К локалхосту биндится. Этот адрес пингует. Без указания адреса, все равно возвращает false
Код:
    udpsocket = new QUdpSocket(this);
    if(udpsocket->bind(QHostAddress("192.168.21.22"), 8888))
        message("Подключение выполнено");
    else
        message("Подключение не выполнено");
    connect(udpsocket, SIGNAL(readyRead()), this, SLOT(readyread()));
« Последнее редактирование: 11 Января, 2016, 16:38:05 от _Cepera_ » Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« Ответ #1 : 11 Января, 2016, 21:12:08 »

Стоит вывести сообщение об ошибке при помощи методов error() и errorString(). Вы пробовали использовать C-функцию bind()? Это также приводит к ошибке? Какой код ошибки в этом случае?
Записан

_Cepera_
Пользователь

Сообщений: 38


« Ответ #2 : 13 Января, 2016, 10:18:21 »

Ошибку №9 выдает
На виртуальной машине  ошибка #10
сишный bind тоже не биндится к конкретному адресу, этот адрес пингует
Код:
   int sock;
    struct sockaddr_in addr;
    sock = socket(AF_INET, SOCK_DGRAM, 0);
    if(sock < 0)
    {
        printf("no socket");
        return 0;
    }
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8888);
    addr.sin_addr.s_addr = htonl(QHostAddress("192.168.1.9").toIPv4Address());
    if(bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
        printf("no bind");
    else
        printf("yes bind");
    close(sock);
« Последнее редактирование: 13 Января, 2016, 12:44:12 от _Cepera_ » Записан
Олег Большаков
Администратор
Житель форума

Сообщений: 2931



WWW
« Ответ #3 : 15 Января, 2016, 14:21:55 »

Предлагаю сначала разобраться в ситуации при помощи C-кода. Для этого приведите вывод утилиты ifconfig с машины, на которой запускаете тестовую программу. Дополнительно надо модифицировать тестовую программу и заменить printf("no bind") на вызов perror("bind()") и QHostAddress() на inet_aton():

Код:
   int sock;
    struct sockaddr_in addr;
    sock = socket(AF_INET, SOCK_DGRAM, 0);
    if(sock < 0)
    {
        printf("no socket");
        return 0;
    }
    addr.sin_family = AF_INET;
    addr.sin_port = htons(8888);
    inet_aton("192.168.1.9", &addr.sin_addr);
    if(bind(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0)
        perror("bind()");
    else
        printf("yes bind");
    close(sock);

Приведите сообщение об ошибке, которое выводится после вызова bind().
Записан

_Cepera_
Пользователь

Сообщений: 38


« Ответ #4 : 21 Января, 2016, 23:09:03 »

Извиняюсь, что долго не отвечал, по обстоятельствам не мог. В общем, решил попробовать использовать qt4.8.7 там передача по udp получилась, корявенько ,но получилась сообщение отправилось и пришло ответное с небольшой потерей данных от сервера(чего добиться не получалось в qt 5.5.0 так как не биндилось). 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2016 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 12 Ноября, 2016, 07:33:18