Пытаюсь написать программу-сервер.
Использую ui для создания графического интерфейса.
Сервер работает в отдельном потоке, интерфейс соответственно вглавном.
Хочу чтобы данные выводились в TextEdit после того,как срвер получит их от клиента.
для этого высылаю сигнал об окончании приема emit signalReceiveComplete(str);
C++ (Qt)
#include "TCPServer.h"
#include "QDebug"
TCPServer::TCPServer()
{
}
void TCPServer::slotReadClient()
{
QTcpSocket* pClientSocket = (QTcpSocket*)sender();
qint64 numbytes;
numbytes = pClientSocket->bytesAvailable();
Buffer_IN.clear();
while( pClientSocket->bytesAvailable() )
Buffer_IN += pClientSocket->readAll();
str = QString(Buffer_IN);
//qDebug() << "str=" << str << endl;
emit signalReceiveComplete(str);
sendToClient(pClientSocket, Buffer_OUT);
}
void TCPServer::sendToClient(QTcpSocket * pSocket, const QByteArray &arOut)
{
pSocket->write(arOut);
}
сам сокет сервера создается в отдельном потоке
C++ (Qt)
MyServerThread::MyServerThread()
{
m_nNextBlockSize = 0;
}
void MyServerThread::slot_setPort(QString text_port)
{
nPort = text_port.toInt();
}
void MyServerThread::run()//(int nPort, QWidget* pwgt /*=0*/): QWidget(pwgt),m_nNextBlockSize(0)
{
m_ptcpServer = new TCPServer();
/* OBRABOTKA OSHIBKI SOEDINENIA */
if(!m_ptcpServer->listen(QHostAddress::Any, nPort))
{
emit signal_errorServer(m_ptcpServer->errorString());
//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()));
exec();
}
/*virtual*/
void MyServerThread::slotNewConnection()
{
QTcpSocket* pClientSocket = m_ptcpServer->nextPendingConnection();
connect(pClientSocket, SIGNAL(disconnected()), pClientSocket, SLOT(deleteLater()) );
connect(pClientSocket, SIGNAL(readyRead()), m_ptcpServer, SLOT(slotReadClient()) );
emit signal_New_Connection("New connection");
}
У меня вот такой вопрс можно ли сделать вот такой connect
connect(ServerThread.m_ptcpServer,SIGNAL(signalReceiveComplete(QString)),ui->txt_edit,SLOT(append(QString)));
И еще , правильно ли я создал строку из массива Buffer_IN str = QString(Buffer_IN)