серверу имитатор сервера. Соединение UDP. Создаю свой класс, отправляю его в QThread, стартую.
Не совсем понятно теперь, как мне "соединиться" с ним. В классе клиента (который в еще одном треде работает), я завожу два QUdpSocket, в сокете на отправку вызываю ConnectToHost() (IP и порт беру из ui), в сокете на прием делаю bind к заранее оговоренному порту. С реальной железкой по ту сторону патчкорда все так работает. С имитатором же не получается: пробую соединиться через QHostAddress::LocalHost, но не совсем понятно, как в нем выполнить соединение. Делаю два сокета на стороне имитатора также, входному делаю bind на порт, к которому выходной сокет клиента присоединяется, затем отправляю пакеты с клиента через write() - в имитаторе нет никаких признаков появления пакета, hasPendingDatagrams() всегда возвращает 0.
Что делаю не так? Как правильно соединить через локалхост UDP клиента и имитатор UDP-сервера?
из этого описания похоже, что вы сервер (приёмник) биндите на LocalHost, а для сокета отправки берёте некий IP из ui. А там в ui у вас есть вариант, который позволяет выбрать тот же LocalHost?
В случае с localhost я на обеих сторонах делаю bind к локалхосту. Сейчас покажу...
На стороне сервера sock_address = QHostAddress::LocalHost; sock_in->abort(); sock_in->bind(sock_address, 50000); На стороне клиента if(!is_localhost) { sock_address.setAddress(target_IP); sock_in_port = target_port; sock_out_port = target_port-1; } else { sock_address.setAddress(QHostAddress::LocalHost); sock_in_port = 50001; sock_out_port = 50000; } ... sock_out->connectToHost(target_IP, sock_out_port); sock_in->abort(); sock_in->bind((is_localhost)?(sock_address):(sock_out->localAddress()), (is_localhost)?(50001):(sock_out->localPort()));
Обсуждают сегодня