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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket::peerPort()  (Прочитано 5699 раз)
Yegor
Гость
« : Сентябрь 06, 2011, 15:46 »

QTcpSocket::peerPort()

Здравствуйте! Помогите мне, пожалуйста, разобраться с сокетами: QTcpSocket::peerPort().

Имею 2 программы, которые связываются с помощью сокетов.
Первая сторона - сервер, вторая - клиент.


На стороне клиента делаю запрос на соединение с серером:

Код:
QTcpSocket *MySocket = new QTcpSocket(this);
QString ip = "127.0.0.1";
quint16 port = 8001;
MySocket->connectToHost(ip,port);

На стороне сервера принимаю входящее соединение:
Код:
//virtual
MyTcpServer::incomingConnection ( int socketDescriptor )
{
QTcpSocket *access_socket = new QTcpSocket(this);
access_socket->setSocketDescriptor(socketDescriptor);

//Входящий ip принимается нормально.
QString ip = accessSocket->peerAddress(); //Возвращает '127.0.0.1'.

//А входящий порт - неправильно!
quint16 port = access_socket->peerPort(); //Возвращает 62806. Не равно ожидаемому (должно быть 8001).
}
Метод 'incomingConnection' срабатывае, когда приходит входящее соединение, но внутри метода не возвращается из сокета нормальный номер порта.

Входящий ip, port я контролирую, чтобы ограничить доступ - только для сторон с разрешенными ip, port давать соединяться.

Как сделать, чтобы 'peerPort' возвращало правильное значение?
Правильно ли я понял про применение и назначние 'peerPort' ?

Помню, еще в Qt3 был аналог этого метода: 'pendingPort'.
« Последнее редактирование: Сентябрь 06, 2011, 15:51 от Yegor » Записан
BRE
Гость
« Ответ #1 : Сентябрь 06, 2011, 16:07 »

Все он возвращает правильно! Улыбающийся
Две стороны - два сокета. У каждого должен быть свой порт. Первый задаешь ты, второй выбирает ОС из свободных.
Не нужно контролировать порт клиента, он может постоянно меняться.

Записан
Yegor
Гость
« Ответ #2 : Сентябрь 10, 2011, 15:57 »

А как же тогда установить принудительно свой порт для сокета, чтобы именно этот порт я и смог увидеть на другой стороне сети. Увидеть с помощью peerPort().
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #3 : Сентябрь 10, 2011, 16:56 »

А как же тогда установить принудительно свой порт для сокета, чтобы именно этот порт я и смог увидеть на другой стороне сети. Увидеть с помощью peerPort().
На стороне сервера вы этот установленный порт можете увидеть при помощи localPort().
Записан
Yegor
Гость
« Ответ #4 : Сентябрь 11, 2011, 16:41 »

Я имею ввиду как установить принудительно номер порта для сокета?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


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


Просмотр профиля
« Ответ #5 : Сентябрь 11, 2011, 18:55 »

Рискну предположить, что Qt не предоставляет функционала установки обратных портов, оставляя их выдачу на откуп ОС.
Конечно вы можете унаследоваться от QTcpSocket и получить доступ к setPeerPort, но насколько я понимаю реально он обратный порт не меняет.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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