Я получаю ошибку:устройство не открывается ошибка + QIODevice :: написать
QIODevice::write (QTcpSocket): device not open. After trying , I think problem is passing parameter server->nextPendingConnection() into object. Can someone has idea how to do it correctly?
Я понимаю, что объект для socketClient
не инициализирован должным образом. Я использую Ubuntu с Qt.
Я использую сервер, используя Qt. Часть сервера имеет два класса на основе QTcpServer
и QTcpSocket
. Server
и SocketClient
. Я создаю объект SocketClient на сервере и для целей тестирования Я открыл сеанс telnet и хочу видеть, что сервер пишет «привет» на терминале. Но как-то его не работает. Может кто-нибудь, пожалуйста, посоветуйте мне, где я делаю ошибку.
Server::Server(QObject *parent) : QObject(parent)
{
server_obj = new QTcpServer(this);
}
void Server::startServer()
{
connect(server_obj, SIGNAL(newConnection()), this, SLOT(incomingConnection()));
if(!server_obj->listen(QHostAddress::Any, 9999))
{
qDebug() << " Server failed to get started";
}
else
{
qDebug() << " Server started"; // this is successful
}
}
void Server::incomingConnection()
{
socketforClient = new SockClient(server_obj->nextPendingConnection());// has a doubt on nextPendingconection??
//only for testing remove it
socketforClient->writeToClient();
}
Класс для клиента
* Description: Its a constructor.I have changed default constructor to add QTcpSocket* object in parameter.I used this constructor in void Server::incomingConnection()
*/
SockClient::SockClient(QObject *parent,QTcpSocket* socket) : QObject(parent)
{
socketClient = new QTcpSocket(socket);
qDebug() << " we are in constructor of 1st sockclient ";
}
// this is for testing purpose only
void SockClient::writeToClient()
{
socketClient->write(" hello world\r\n");
socketClient->flush();
socketClient->waitForBytesWritten(3000);
}
// заголовок файла из SockClient
class SockClient : public QObject
{
Q_OBJECT
public:
explicit SockClient(QObject *parent, QTcpSocket* socket= 0); // I have created
void writeToClient(); // This is for testing purpose
~SockClient();
signals:
private slots:
void readClient();
private:
void sendResponsetoMops();
QTcpSocket *socketClient;
quint16 nextBlockSize;
public slots:
};
ли конструктор SockClient аргумент по умолчанию для него это второй параметр ('socket')? – Jan
@Jan 1, нет, у него нет – samprat