Что-то провозился я с реализацией сервер-клиента на Qt... Не могу найти ошибку... Такое чувство, что сигнал не срабатывает. В инете не нашёл решения проблемы, может не то искал...
Вот мой код с сервера (сокращённый)
.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtNetwork>
#include <QTextCodec>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QTcpServer *tcpServer;
qint16 nextBlockSize;
void sendToClient(QTcpSocket *socket, const QString& str);
private slots:
void serverStart();
public slots:
virtual void newConnection();
void readClient();
};
#endif // MAINWINDOW_H
.cpp (упрощённый)
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
tcpServer = new QTcpServer(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::readClient()
{
// тут код не выполняется вообще. Сколько пытаюсь отправить сообщения, всегда тишина.
// wiresharp показывает, что пакеты отправляются, но вот ток почему-то не обрабатывает код на их поступление...
}
void MainWindow::newConnection()
{
// обрабатываеются соединения
QTcpSocket* clientSocket = tcpServer->nextPendingConnection();
connect(clientSocket, SIGNAL(disconnected()),
clientSocket, SLOT(deleteLater())
);
//проблемный коннект...
connect(clientSocket, SIGNAL(readyRead()),
this, SLOT(readClient())
);
sendToClient(clientSocket, "Server Response: Connected!");
ui->textEdit->append("подключён клиент");
}
void MainWindow::serverStart()
{
//работает, сервер стартует
//сигнал - порт работает корректно
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(newConnection()) );
}
void MainWindow::sendToClient(QTcpSocket* socket, const QString& str)
{
// этот код работает (в telnet отправляются сообщения из этого блока)
}
может где законнектил неправильно?
Пользователь решил продолжить мысль 25 Мая 2013, 23:27:49:
нашёл проблему

Как и предпологалось, не в том месте законнектил сигнал...
У меня сокет динамичный всегда, данные из input'ов берутся. Сделал на стороне клиента так

connet сразу после определения сокета
void ClientWindow::slotSendToServer()
{
QString host = ui->inputAdress->text();
qint16 port = ui->inputPort->text().toInt();
tcpSocket->disconnect();
tcpSocket->connectToHost(host, port);
connect(tcpSocket, SIGNAL(readyRead()), SLOT(slotReadyRead()));
QTextStream out(tcpSocket);
out << ui->inputMess->text();
}
ну и у сервера таже проблема
