Я сделал проект на 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
Невозможно подключить клиентское и серверное приложение, созданное с помощью сети Qt ⇐ C++
Программы на C++. Форум разработчиков
1710479121
Гость
Я сделал проект на 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();
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/78164776/cannot-connect-my-client-and-server-app-made-with-qt-netwoking[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия