Russian Qt Forum
Ноябрь 23, 2024, 12:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: RE_Bind в UDP Socket  (Прочитано 7969 раз)
ADA
Гость
« : Июль 11, 2011, 13:54 »

Всем привет. Я что-то никак не могу разобраться как изменить порт udp socket-a в процессе работы приложения.
Код
C++ (Qt)
udpSocket = new QUdpSocket(this);
udpSocket->bind(45454, QUdpSocket::ShareAddress); //Забиндил на порт.
 
void Sender::SetPort( QString vPort)
{
  udpSocket->bind(QHostAddress::LocalHost, Port.toInt() ); // Пытаюсь переназначить порт
}
 
В итоге при вызове функции ловлю : QNativeSocketEngine::bind() was not called in QAbstractSocket::UnconnectedState.
Как же всё-таки переназначить порт(если это вообще возможно)? Никак не могу разобраться..помогите.
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #1 : Июль 11, 2011, 14:51 »

Сокет вас просит перейти в UnconnectedState, так что попробйте перед повторным биндом сделать abort или close+waitForDisconnected.
Записан
ADA
Гость
« Ответ #2 : Июль 11, 2011, 15:32 »

Сокет вас просит перейти в UnconnectedState, так что попробйте перед повторным биндом сделать abort или close+waitForDisconnected.

Попробовал close, reset, abort - ругань пропадает, но и данные перестают приниматься Плачущий
Код
C++ (Qt)
void Sender::SetPort( QString vPort)
{
   //udpSocket->reset();
   //udpSocket->close();
   //udpSocket->waitForDisconnected(100);
   udpSocket->abort();
   udpSocket->bind(QHostAddress::LocalHost, Port.toInt() );
}
 
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Июль 11, 2011, 16:47 »

А данные у вас с локалхоста идут? А то вначале вы биндите QHostAddress::Any, а потом на QHostAddress::LocalHost.
Попробуйте:
Код
C++ (Qt)
void Sender::SetPort( QString vPort)
{
   udpSocket->abort();
   udpSocket->bind(Port.toInt(), QUdpSocket::ShareAddress);;
}
Или даже:
Код
C++ (Qt)
void Sender::SetPort( QString vPort)
{
   udpSocket->abort();
   udpSocket->bind(45454, QUdpSocket::ShareAddress);;
}
Записан
ADA
Гость
« Ответ #4 : Июль 12, 2011, 09:32 »

А данные у вас с локалхоста идут? А то вначале вы биндите QHostAddress::Any, а потом на QHostAddress::LocalHost.

Всё оказалось более банально...с порта 45454 перескакивал на порт 1001....а он оказывается был занят и к ниму просто невозможно было приконектиться. Обеспокоенный
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.199 секунд. Запросов: 23.