PDA

View Full Version : How I can get the message from client



mraittin
3rd September 2007, 15:44
How can i get reading the message from client,Sorry My English
I was using this example http://wiki.qtcentre.org/index.php?title=Simple_Chat

Server.cpp


connect(quitButton, SIGNAL(clicked()), this, SLOT(close()));
connect(tcpServer, SIGNAL(newConnection()), this, SLOT(sendFortune()));

QHBoxLayout *buttonLayout = new QHBoxLayout;
buttonLayout->addStretch(1);
buttonLayout->addWidget(quitButton);
buttonLayout->addStretch(1);


QVBoxLayout *mainLayout = new QVBoxLayout;
mainLayout->addWidget(statusLabel);
mainLayout->addLayout(buttonLayout);
setLayout(mainLayout);

setWindowTitle(tr("Fortune Server"));
}

void Server::sendFortune()
{
QTcpSocket *tcpSocket = tcpServer->nextPendingConnection();

connections.append(tcpSocket);
QBuffer* buffer = new QBuffer(this);
buffer->open(QIODevice::ReadWrite);
buffers.insert(tcpSocket, buffer);

QDataStream out;
out.setDevice(tcpSocket);
QString tiedosto=haeTiedosto(kuvaIndex);
QFile file(tiedosto);
file.open(QIODevice::ReadOnly);
QDataStream fstr;
fstr.setDevice(&file);


file.seek(0);
char* data = new char[65536];
while(!file.atEnd())
{
int read = fstr.readRawData(data, 65536);
int sent = out.writeRawData(data, read);
}

delete[] data;

tcpSocket->waitForBytesWritten();



connect(tcpSocket, SIGNAL(readyRead()), SLOT(receiveMessage()));
connect(tcpSocket, SIGNAL(disconnected()), SLOT(removeConnection()));


}
void Server::removeConnection()
{

QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
QBuffer* buffer = buffers.take(socket);
buffer->close();
buffer->deleteLater();
connections.removeAll(socket);
socket->deleteLater();




}

void Server::receiveMessage()
{

QTcpSocket* socket = static_cast<QTcpSocket*>(sender());
QBuffer* buffer = buffers.value(socket);

// missing some checks for returns values for the sake of simplicity
qint64 bytes = buffer->write(socket->readAll());
// go back as many bytes as we just wrote so that it can be read
buffer->seek(buffer->pos() - bytes);
// read only full lines, line by line
while (buffer->canReadLine())
{
QByteArray line = buffer->readLine();
foreach (QTcpSocket* tcpSocket, connections)
{
int d=line.toInt();
QString data=data.setNum(d);
statusLabel->setText(data);
}

}

marcel
3rd September 2007, 16:27
You should implement it as the receiving part is implemented in the client. No big differences. But you'll have to modify the client too, to be able to send data.

Regards

mraittin
7th September 2007, 13:41
#include <QtGui>
#include <QImage>
#include "kuvaclient.h"


// including <QtGui> saves us to include every class user, <QString>, <QFileDialog>,...

KuvaClient::KuvaClient(QDialog *parent)
{
setupUi(this); // this sets up GUI

tcpSocket = new QTcpSocket(this);
sockStream = new QDataStream(tcpSocket);
file = new QFile("testi.bmp");
if(file->exists())
file->remove();
file->open(QIODevice::ReadWrite);

numberFrame=0;
fileStream = new QDataStream(file);
tcpSocket->abort();
tcpSocket->connectToHost("masa",1200);
connect(vasen, SIGNAL( clicked() ), this, SLOT( Vasenpaina()));
connect(oikea, SIGNAL( clicked() ), this, SLOT( Oikeapaina()));
connect(tcpSocket, SIGNAL(readyRead()), this, SLOT(readImage()));

connect(tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)),
this, SLOT(displayError(QAbstractSocket::SocketError)));
}

void KuvaClient::Vasenpaina()
{

tcpSocket->abort();
tcpSocket->connectToHost("localhost",1200);
numberFrame=numberFrame+1;
QString number=number.setNum(numberFrame);
//koe->setText(number);

tcpSocket->write(number);




}
void KuvaClient::readImage()
{

//tcpSocket->seek(0);
char *buffer = new char[65536];
//int count = tcpSocket->bytesAvailable();
//sockStream->resetStatus();
while(!sockStream->atEnd())
{
int src = sockStream->readRawData(buffer, 65536);
int rcv = fileStream->writeRawData(buffer, src);
int xxx = 0;
xxx++;
}

delete[] buffer;
file->flush();
QImage someimage("testi.bmp");
QPixmap preview;
preview = preview.fromImage(someimage);

label->setPixmap(preview);
tcpSocket->waitForBytesWritten();


}
void KuvaClient::Oikeapaina()
{


tcpSocket->abort();
tcpSocket->connectToHost("locahost",1200);
numberFrame++;
/*QString number=number.setNum(numberFrame);
tcpSocket->write(number.toLatin1() );
tcpSocket->deleteLater();
*/

}
void KuvaClient::displayError(QAbstractSocket::SocketEr ror socketError)
{
switch (socketError) {
case QAbstractSocket::RemoteHostClosedError:
break;
case QAbstractSocket::HostNotFoundError:
QMessageBox::information(this, tr("Fortune Client"),
tr("The host was not found. Please check the "
"host name and port settings."));
break;
case QAbstractSocket::ConnectionRefusedError:
QMessageBox::information(this, tr("Fortune Client"),
tr("The connection was refused by the peer. "
"Make sure the fortune server is running, "
"and check that the host name and port "
"settings are correct."));
break;
default:
QMessageBox::information(this, tr("Fortune Client"),
tr("The following error occurred: %1.")
.arg(tcpSocket->errorString()));
}


}

This is my client code.It' writes message to server,but i can't read message from socket in the server side.