Russian Qt Forum
Ноябрь 24, 2024, 01:01 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpServer, доступ к серверу с интернета(внешки)  (Прочитано 3443 раз)
Mobelis
Гость
« : Август 03, 2010, 16:24 »

Всем доброго дня. Вот решил разобраться как создать средствами Qt сервер который бы принимал данные от клиента и в последующем их обрабатывал. Имеется выделенный(реальный) IP адрес. Хотелось бы запустить сервер и ждать подключения клиента. Но не с локальной сети а именно с интернета. Сервер написать и собрать с примеров получилось и он отлично работает на домашнем компьютере клиент программа присоединяется и сообщения отправляются на сервер и передаются клиенту обратно. Но вот почему то как вписываю свой IP и пытаюсь запустить сервер то выдает ошибку The address is not available.

Привожу листинг сервера:

vvv.h
Код
C++ (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.cpp
Код
C++ (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.cpp
Код
C++ (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);
}
Записан
Zmeishe
Гость
« Ответ #1 : Август 13, 2010, 13:25 »

У меня отлично работает.

listen(QHostAddress::Any, nPort);
Записан
Edynchik
Гость
« Ответ #2 : Ноябрь 15, 2010, 11:22 »

вопрос по клиенту...
« Последнее редактирование: Ноябрь 26, 2010, 17:50 от Edynchik » Записан
Edynchik
Гость
« Ответ #3 : Ноябрь 26, 2010, 17:49 »

а можете подлиться клиентом к данному серверу, FortuneClient Тоже в принципе соединяется...только хотелось бы видеть картину в целом, да и переделать FortuneClient не шибко получается...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.17 секунд. Запросов: 21.