Всем доброго дня. Вот решил разобраться как создать средствами Qt сервер который бы принимал данные от клиента и в последующем их обрабатывал. Имеется выделенный(реальный) IP адрес. Хотелось бы запустить сервер и ждать подключения клиента. Но не с локальной сети а именно с интернета. Сервер написать и собрать с примеров получилось и он отлично работает на домашнем компьютере клиент программа присоединяется и сообщения отправляются на сервер и передаются клиенту обратно. Но вот почему то как вписываю свой IP и пытаюсь запустить сервер то выдает ошибку
The address is not available.Привожу листинг сервера:
vvv.hC++ (Qt)
#ifndef VVV_H
#define VVV_H
#include "ui_vvv.h"
#include <QtGui/QMainWindow>
#include <QtNetwork/QTcpServer>
#include <QtNetwork/QTcpSocket>
class QTcpServer;
class QTcpSocket;
class vvv : public QMainWindow
{
Q_OBJECT
protected:
void sendToClients(const QByteArray& line);
private:
Ui::vvvClass ui;
QTcpServer* m_ptcpServer;
quint16 m_nNextBlockSize;
void sendToClient(QTcpSocket* pSocket, const QString& str);
public:
vvv(QWidget *parent = 0, Qt::WFlags flags = 0);
~vvv();
private slots:
void on_Button1_clicked();
void slotNewConnection();
void slotReadClient();
};
#endif // VVV_H
main.cppC++ (Qt)
#include "vvv.h"
#include <QtGui/QApplication>
#include <QtCore/QTextCodec>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("Windows-1251"));
vvv w;
w.show();
return a.exec();
}
vvv.cppC++ (Qt)
#include "vvv.h"
#include <QtGui>
vvv::vvv(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
}
vvv::~vvv()
{
}
void vvv::on_Button1_clicked()
{
m_ptcpServer = new QTcpServer(this);
if (!m_ptcpServer->listen(QHostAddress(ui.lineEdit_2->text()) , ui.lineEdit_3->text().toInt())) {
ui.label_3->setText("Server is not working " + m_ptcpServer->errorString());
m_ptcpServer->close();
return;
}
ui.label_3->setText("Server is working");
connect(m_ptcpServer, SIGNAL(newConnection()),
this, SLOT(slotNewConnection())
);
}
void vvv::slotNewConnection()
{
QTcpSocket* pClientSocket = m_ptcpServer->nextPendingConnection();
connect(pClientSocket, SIGNAL(disconnected()),
pClientSocket, SLOT(deleteLater())
);
connect(pClientSocket, SIGNAL(readyRead()),
this, SLOT(slotReadClient())
);
ui.label_3->setText("Server Response: Connected!");
sendToClient(pClientSocket, "Server Response: Connected!");
}
void vvv::slotReadClient()
{
QTcpSocket* pClientSocket = (QTcpSocket*)sender();
QDataStream in(pClientSocket);
in.setVersion(QDataStream::Qt_4_2);
in >> m_nNextBlockSize;
QTime time;
QString str;
in >> time >> str;
QString strMessage =time.toString() + " " + "Client has sended - " + str;
ui.textEdit->append(strMessage);
m_nNextBlockSize = 0;
sendToClient(pClientSocket,"Server Response: Received \"" + str + "\"");
}
void vvv::sendToClient(QTcpSocket* pSocket, const QString& str)
{
QByteArray arrBlock;
QDataStream out(&arrBlock, QIODevice::WriteOnly);
out.setVersion(QDataStream::Qt_4_2);
out << quint16(0) << QTime::currentTime() << str;
out.device()->seek(0);
out << quint16(arrBlock.size() - sizeof(quint16));
pSocket->write(arrBlock);
}