Как подключить клиента к серверу в глобальной сети?
Написал простенькие программы клиента и сервера. При локальном соединении все ок. Стоит указать клиенту в socket->connectToHost(...);
свой глобальный ip адрес, сокет выдает ошибку "Connection refused.". Сервер слушает QHostAddress::Any
. Есть какие отличия при попытке соединения по локальному и глобальному ip-шнику? В качестве сервера использую QTcpServer
, сокет QTcpSocket
. ip адрес белый.
UPD:
При подключении клиента с другой машины и с другим роутером выводит "Network operation timed out"
server.cpp
Server::Server()
{
if(listen(QHostAddress::Any, 1234)) {
qDebug() << "start";
}
else {
qDebug() << "ne start";
}
}
Обработка подключения клиента:
void Server::incomingConnection(qintptr handle)
{
socket = new QTcpSocket;
socket->setSocketDescriptor(handle);
connect(socket, &QTcpSocket::readyRead, this, &Server::slotReadyRead);
connect(socket, &QTcpSocket::disconnected, this, &Server::socketDisconnected);
sockets.push_back(socket);
qDebug() << "client connected" << handle;
}
client.cpp
Подключение сокета к серверу
Widget::Widget(QWidget *parent)
: QWidget(parent),
socket(new QTcpSocket(this))
{
connect(socket, &QTcpSocket::readyRead, this, &Widget::slotReadyRead);
connect(socket, &QTcpSocket::disconnected, socket, &QTcpSocket::deleteLater);
connect(socket, &QTcpSocket::errorOccurred, this, &Widget::socketError);
socket->connectToHost("178.65.126.214", 1234);
socket->waitForConnected();
}
так же прилагаю схему сети(вроде все просто и понятно)
Ответы (2 шт):
Благодаря подсказке из комментариев, я настроил проброс портов в меню роутера с нужного порта на нужный локальный ip и все заработало. У моего роутера это выглядит вот так:
Дополню вопрос ответом из своего опыта.
Потребовалось настроить проброску портов в роутере, но также пришлось дополнительно указывать IP сетевой карты, которая использовалась для целевой виртуальной машины, т.к. сервер крутился на виртуалке.