nul
29-12-2005, 23:42
... der allerdings nicht richtig funktioniert!
Meine Klasse stuetzt sich stark auf die Beispiele aus dem Bereich network, die Trolltech mit QT4 ausliefert.
Allerdings kann ich keine Daten vom Socket lesen, oder es werden keine Daten geschrieben :confused:
Auf jedenfall macht die Klasse nicht das was sie soll. Ich kann zwar verbindungen annehmen, kann aber dann vom Socket keine Nachrichten lesen, oder wie schon gesagt, das senden funktioniert nicht, was auch immmer ...
Vielleicht hat einer von euch kurz Zeit die ff. Klasse zu durchforsten und mir nen Ratschlag geben, was ich falsch mache ...
TcpServer::TcpServer()
{
tcpServer = new QTcpServer( this );
QHostAddress* hostaddr = new QHostAddress( "127.0.0.1" );
if ( !tcpServer->listen( *hostaddr, TCP_SERVER_PORT ) )
{
QString who = "TcpServer";
QString why = tcpServer->errorString();
// error message!
std::cout << "Can't create TcpServerSocket!" << std::endl;
tcpServer->close();
return;
}
connect( tcpServer, SIGNAL( newConnection() ), this, SLOT( newClientConnection() ) );
};
TcpServer::~TcpServer()
{
tcpServer->close();
};
void
TcpServer::newClientConnection()
{
QTcpSocket* clientSocket = tcpServer->nextPendingConnection();
connect( clientSocket, SIGNAL( readyRead() ), this, SLOT( readClientMessage( clientSocket ) ) );
std::cout << "new connection" << std::endl;
};
void
TcpServer::readClientMessage( QTcpSocket* clientSocket )
{
std::cout << "read data" << std::endl;
/* QDataStream in( clientSocket );
in.setVersion( QDataStream::Qt_4_1 );
QString clientMessage;
in >> clientMessage;
std::cout << clientMessage.toStdString() << std::endl;
clientSocket->disconnect();
delete clientSocket; */
};
void
TcpServer::sendMessage( const QHostAddress* host, const QString& message )
{
QTcpSocket* sendSocket;
QByteArray block;
QDataStream out( &block, QIODevice::WriteOnly );
out.setVersion( QDataStream::Qt_4_1 );
out << message;
sendSocket = new QTcpSocket;
sendSocket->connectToHost ( *host, TCP_SERVER_PORT );
connect( sendSocket, SIGNAL( disconnected() ), sendSocket, SLOT( deleteLater() ) );
sendSocket->write( block );
sendSocket->disconnectFromHost();
delete sendSocket;
};
Bin fuer jeden Hinweis dankbar!!!
mfg
Meine Klasse stuetzt sich stark auf die Beispiele aus dem Bereich network, die Trolltech mit QT4 ausliefert.
Allerdings kann ich keine Daten vom Socket lesen, oder es werden keine Daten geschrieben :confused:
Auf jedenfall macht die Klasse nicht das was sie soll. Ich kann zwar verbindungen annehmen, kann aber dann vom Socket keine Nachrichten lesen, oder wie schon gesagt, das senden funktioniert nicht, was auch immmer ...
Vielleicht hat einer von euch kurz Zeit die ff. Klasse zu durchforsten und mir nen Ratschlag geben, was ich falsch mache ...
TcpServer::TcpServer()
{
tcpServer = new QTcpServer( this );
QHostAddress* hostaddr = new QHostAddress( "127.0.0.1" );
if ( !tcpServer->listen( *hostaddr, TCP_SERVER_PORT ) )
{
QString who = "TcpServer";
QString why = tcpServer->errorString();
// error message!
std::cout << "Can't create TcpServerSocket!" << std::endl;
tcpServer->close();
return;
}
connect( tcpServer, SIGNAL( newConnection() ), this, SLOT( newClientConnection() ) );
};
TcpServer::~TcpServer()
{
tcpServer->close();
};
void
TcpServer::newClientConnection()
{
QTcpSocket* clientSocket = tcpServer->nextPendingConnection();
connect( clientSocket, SIGNAL( readyRead() ), this, SLOT( readClientMessage( clientSocket ) ) );
std::cout << "new connection" << std::endl;
};
void
TcpServer::readClientMessage( QTcpSocket* clientSocket )
{
std::cout << "read data" << std::endl;
/* QDataStream in( clientSocket );
in.setVersion( QDataStream::Qt_4_1 );
QString clientMessage;
in >> clientMessage;
std::cout << clientMessage.toStdString() << std::endl;
clientSocket->disconnect();
delete clientSocket; */
};
void
TcpServer::sendMessage( const QHostAddress* host, const QString& message )
{
QTcpSocket* sendSocket;
QByteArray block;
QDataStream out( &block, QIODevice::WriteOnly );
out.setVersion( QDataStream::Qt_4_1 );
out << message;
sendSocket = new QTcpSocket;
sendSocket->connectToHost ( *host, TCP_SERVER_PORT );
connect( sendSocket, SIGNAL( disconnected() ), sendSocket, SLOT( deleteLater() ) );
sendSocket->write( block );
sendSocket->disconnectFromHost();
delete sendSocket;
};
Bin fuer jeden Hinweis dankbar!!!
mfg