Невозможно подключить клиентское и серверное приложение, созданное с помощью сети QtC++

Программы на C++. Форум разработчиков
Ответить
Гость
 Невозможно подключить клиентское и серверное приложение, созданное с помощью сети Qt

Сообщение Гость »

Я сделал проект на C++. Проект завершен. Для этого я использовал сеть Qt для отправки сообщения между серером и клиентским приложением. На одном и том же компьютере оба могут отправлять и получать сообщения, но связь на разных компьютерах не работает. Если я открою клиент на другом компьютере и сервер на своем, он не подключится.
Я попробовал указать IP-адрес сервера. Я протестировал его еще раз на том же компьютере: если IP-адрес неправильный, он не подключается даже к тому же компьютеру, но после исправления он подключается. Проверил, является ли проблема брандмауэром, выполнил все методы для брандмауэра. Я вижу потенциальную проблему: возможно, он вообще не подключается через Интернет. Я новичок в этой сети и только начинаю. Вот ссылка на проект на github:
также здесь приведен код на стороне клиента и сервера, который управляет соединением:
//clientManager.h
#ifndef CLIENTMANAGER_H
#define CLIENTMANAGER_H

#include
#include
class ClientManager : public QObject
{
Q_OBJECT
public:
explicit ClientManager(QString ip = "Server IP here", ushort port = 4500, QObject *parent = nullptr);
void connectToServer();
void sendMessage(QString message);
void disconnectFromServer();
signals:
void connected();
void disconnected();
void dataReceived(QByteArray data);
private slots:
void readyRead();

private:
QTcpSocket *_socket;
QString _ip;
ushort _port;
};

#endif // CLIENTMANAGER_H

//clientManager.cpp
#include "ClientManager.h"

ClientManager::ClientManager(QString ip,ushort port,QObject *parent)
: QObject{parent},
_ip(ip),
_port(port)
{
_socket= new QTcpSocket(this);
connect(_socket,&QTcpSocket::connected,this,&ClientManager::connected);
connect(_socket,&QTcpSocket::disconnected,this,&ClientManager::disconnected);
connect(_socket,&QTcpSocket::readyRead,this,&ClientManager::readyRead);
}

void ClientManager::connectToServer()
{
_socket->connectToHost(_ip,_port);
}

void ClientManager::sendMessage(QString message)
{
_socket->write(message.toUtf8());
}
void ClientManager::readyRead()
{
auto data = _socket->readAll();
emit dataReceived(data);
}
void ClientManager::disconnectFromServer()
{
_socket->disconnectFromHost();
}

серверная часть:
//servermanager.h
#ifndef SERVERMANAGER_H
#define SERVERMANAGER_H

#include
#include

class ServerManager : public QObject
{
Q_OBJECT
public:
explicit ServerManager(ushort port=4500,QObject *parent = nullptr);
void disconnectAllClients();
private slots:
void newClientConnectionRecieved();
void onClientDisconnected();
signals:
void newClientConnected(QTcpSocket *client);
void clientDisconnected(QTcpSocket *client);
private://field
QTcpServer *_server;
QList _clients;
private://methods
void setupServer(ushort port);
};

#endif

//servermanager.cpp
#include "ServerManager.h"
#include "qtcpsocket.h"
ServerManager::ServerManager(ushort port,QObject *parent)
: QObject{parent}
{
setupServer(port);
}
void ServerManager::newClientConnectionRecieved()
{
auto client = _server->nextPendingConnection();
_clients setProperty("id",id);
connect(client, &QTcpSocket::disconnected,this,&ServerManager::onClientDisconnected);
emit newClientConnected(client);
}
void ServerManager::onClientDisconnected()
{
auto client = qobject_cast(sender());
// int id = client->property("id").toInt();
_clients.removeOne(client);
emit clientDisconnected(client);
}
void ServerManager::setupServer(ushort port)
{
_server=new QTcpServer(this);
connect(_server, &QTcpServer::newConnection,this,&ServerManager::newClientConnectionRecieved);
_server->listen(QHostAddress::Any,port);
}
void ServerManager::disconnectAllClients()//for disconnecting all client
{
for (QTcpSocket* client : qAsConst(_clients)) {//looks for every active client and disconnects
client->disconnectFromHost();
}
}


Подробнее здесь: https://stackoverflow.com/questions/781 ... -netwoking
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»