Nachdem mir hier schon mehrfach super geholfen werden konnte hier eine neue Sache bei der ich feststecke:
Ich schreibe gerade ein Projekt mit einer Server/Client Struktur. Dabei habe ich mich eng an die Beispiele von der Trolltech HP gehalten und es geht auch fast alles.
Ich rufe erst das Programm mit dem Server auf, dann das 2. Programm mit dem Client. Der verbindet erfolgreich mit dem Server und von der Server-Seite kann ich auch beliebige Kommandos an den Client schicken. Jetzt mein Problem: wie kann ich vom Client Daten an den Server schicken, die der auslesen und dann abhängig von den eingegangenen Daten verarbeiten kann?
Vielen Dank schonmal für jede Hilfe!
palli
Client/Server - Probleme
für jeden connecteten Client ein entsprechendes Objekt auf dem Server erstellen, und dessen Signal exakt so verarbeiten wie auf Client Seite (nur eben für jeden Client)
In code: (wenn NewConnection ( ) mit dem Server signal newConnection() verbunden ist und MySlotForIncomingData ( ) ein slot des Servers ist, der die Daten verarbeitet)
ersatzweise kannst du (ist effektiver) void QTcpServer::incomingConnection ( int socketDescriptor ) überladen und selbiges machen:
Elgrimm Esleborn
In code: (wenn NewConnection ( ) mit dem Server signal newConnection() verbunden ist und MySlotForIncomingData ( ) ein slot des Servers ist, der die Daten verarbeitet)
Code: Alles auswählen
void C_AbstractServer::NewConnection ( )
{
while ( hasPendingConnections ( ) )
{
QTcpSocket *p_socket ( nextPendingConnection ( ) );
if ( p_socket == NULL )
continue;
connect ( p_socket, SIGNAL ( disconnected ( ) ), p_socket, SLOT ( deleteLater ( ) ) );
connect ( p_socket, SIGNAL ( readyRead ( ) ), this, SLOT ( MySlotForIncomingData ( ) ) );
}
}Code: Alles auswählen
void C_AbstractServer::incomingConnection ( int f_socketDescr )
{
while ( hasPendingConnections ( ) )
{
QTcpSocket *p_socket = new QTcpSocket ( this );
p_socket->setSocketDescriptor ( f_socketDescr );
connect ( p_socket, SIGNAL ( disconnected ( ) ), p_socket, SLOT ( deleteLater ( ) ) );
connect ( p_socket, SIGNAL ( readyRead ( ) ), this, SLOT ( MySlotForIncomingData ( ) ) );
}
}
Zuletzt geändert von Esleborn am 16. Juli 2006 22:24, insgesamt 1-mal geändert.
Glaube an eine Lösung, nur dann kannst du auch eine finden.
eine weitere nette Funktion ist das Senden von Daten an alle Clients, zB so implementiert (wenn ml_clients eine Liste von Streams auf die Client-Sockets ist)
Wenn du so eine Liste erstellst, musst du nat. dafür sorgen, dass disconnectende Clients aus der List gestrichen werden und gelöscht werden... (Ebenso wie ihre Streams)
Elgrimm Esleborn
Code: Alles auswählen
template <class T> C_AbstractServer& operator<< ( const T &f_object )
{
foreach ( C_Client *p_client, ml_clients )
*p_client << f_object;
return *this;
}Elgrimm Esleborn
Glaube an eine Lösung, nur dann kannst du auch eine finden.