Привет всем! Первый раз пишу у вас на форуме. Проблема в следующем, Написал 2 небольшие программы сервер - QTcpServer и клиент -QTcpSocket, на локальном компе все соединяется и все работает, но когда я клиент переношу на другой компьютер, он не подключается к серверу, причем если я, запускаю этот же клиент с этим IP, на том же компе где и сервер, все работает. Вот собственно говоря код:
Server.h:
#ifndef MYSERVER_H
#define MYSERVER_H
#include <QWidget>
#include <QTcpServer>
#include <QTcpSocket>
#include <QMessageBox>
#include <QTime>
class MyServer : public QWidget
{
Q_OBJECT
private:
QTcpServer* m_ptcpServer;
quint16 m_nNextBlockSize;
public:
explicit MyServer( int nPort, QWidget *parent = nullptr);
void sendToClient(const QString& str);
QTcpSocket *pClientSocket;
public slots:
virtual void slotNewConnection();
signals:
};
#endif // MYSERVER_H
Server.cpp
#include "myserver.h"
MyServer::MyServer(int nPort, QWidget *parent)
: QWidget(parent)
, m_nNextBlockSize(0)
{
m_ptcpServer = new QTcpServer(this);
if (!m_ptcpServer->listen(QHostAddress::AnyIPv4, nPort))
{
QMessageBox::critical(0, "Server Error", "Unable to start the server:" + m_ptcpServer->errorString());
m_ptcpServer->close();
return;
}
connect(m_ptcpServer, SIGNAL(newConnection()), this, SLOT(slotNewConnection()));
}
void MyServer::slotNewConnection()
{
pClientSocket = m_ptcpServer->nextPendingConnection();
connect(pClientSocket, SIGNAL(disconnected()), pClientSocket, SLOT(deleteLater()));
connect(pClientSocket, SIGNAL(readyRead()), pClientSocket, SLOT(slotReadClient()));
sendToClient("Server Response: Connected!");
}
void MyServer::sendToClient(const QString &str)
{
QByteArray arrBlock;
QDataStream out(&arrBlock, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_5_9);
out << quint16(0) << QTime::currentTime() << str;
out.device()->seek(0);
out << quint16(arrBlock.size() - sizeof(quint16));
pClientSocket->write(arrBlock);
}
Client.h
#ifndef MYCLIENT_H
#define MYCLIENT_H
#include <QWidget>
#include <QTcpSocket>
#include <QTime>
#include <QTextEdit>
#include <QVBoxLayout>
#include <QLabel>
#include <QDebug>
class MyClient : public QWidget
{
Q_OBJECT
public:
explicit MyClient(const QString& strHost, int nPort, QWidget *parent = nullptr);
private:
QTcpSocket* m_pTcpSocket;
quint16 m_nNextBlockSize;
QTextEdit* m_ptxtInfo;
private slots:
void slotReadyRead ();
void slotConnected ();
void slotError (QAbstractSocket::SocketError);
signals:
};
#endif // MYCLIENT_H
Client.cpp
#include "myclient.h"
MyClient::MyClient(const QString& strHost, int nPort, QWidget *parent)
: QWidget(parent) , m_nNextBlockSize(0)
{
m_pTcpSocket = new QTcpSocket(this);
m_pTcpSocket->connectToHost(strHost, nPort);
connect(m_pTcpSocket, SIGNAL(connected()), SLOT(slotConnected()));
connect(m_pTcpSocket, SIGNAL(readyRead()), SLOT(slotReadyRead()));
connect(m_pTcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(slotError(QAbstractSocket::SocketError)));
m_ptxtInfo = new QTextEdit;
m_ptxtInfo->setReadOnly(true);
QVBoxLayout* pvbxLayout = new QVBoxLayout;
pvbxLayout->addWidget(new QLabel("<H1>Client</H1>"));
pvbxLayout->addWidget(m_ptxtInfo);
setLayout(pvbxLayout);
}
void MyClient::slotReadyRead()
{
QDataStream in(m_pTcpSocket);
in.setVersion(QDataStream::Qt_4_2);
for (;;) {
if (!m_nNextBlockSize) {
if (m_pTcpSocket->bytesAvailable() < sizeof(quint16)) {
break;
}
in >> m_nNextBlockSize;
}
if (m_pTcpSocket->bytesAvailable() < m_nNextBlockSize) {
break;
}
QTime time;
QString str;
in >> time >> str;
m_ptxtInfo->append(time.toString() + " " + str);
// qDebug() << str;
m_nNextBlockSize = 0;
}
}
void MyClient::slotError(QAbstractSocket::SocketError err)
{
QString strError =
"Error: " + (err == QAbstractSocket::HostNotFoundError ?
"The host was not found." :
err == QAbstractSocket::RemoteHostClosedError ?
"The remote host is closed." :
err == QAbstractSocket::ConnectionRefusedError ?
"The connection was refused." :
QString(m_pTcpSocket->errorString())
);
qDebug() << strError;
m_ptxtInfo->append(strError);
}
void MyClient::slotConnected()
{
m_ptxtInfo->append("Received the connected() signal");
// QString str = "Received the connected() signal";
//qDebug() << "Received the connected() signal";
}