pucki
28-12-2005, 20:56
hi,
mit nachfolgender klasse habe ich ein kleines problem. der konstruktor wird aufgerufen, die Verbindung wird auch aufgebaut und dann nur noch fragezeichen ....
das projekt (linkpruefung):
für das ganze exisitiert eine kleine graphische oberfläche. der benutzer drückt nach diversen einstellungen eine button. der verknüpfte slot ruft eine globale methode auf, die dann die eigentliche arbeit übernimmt. die klasse HttpClient soll die kommunikation mit dem webserver übernehmen.
verbindung aufbauen und die Antwort als String zurückgeben.
zuerst habe ich das ganze ohne signals versucht, ging natürlich nicht, also signals connected und debug-ausgaben hinzugefügt (cout << ""). nun mußte sich feststellen, dass nur das erste signal gesendet wird (hostFound()). die restlichen nicht. die syntax müßte stimmen, da ich ja das erste signal entgegennehmen kann. fehlermeldungen kommen keine.
HttpClient::HttpClient(QObject &w){
_socket = new QSocket();
connect( _socket, SIGNAL(hostFound()),SLOT(send_Socket()));
connect( _socket, SIGNAL(connected()),SLOT(send_Socket()));
connect( _socket, SIGNAL(bytesWritten( int )),SLOT(write_Socket(int)));
connect( _socket, SIGNAL(delayedCloseFinished()),SLOT(send_Socket()) );
}
void HttpClient::conSocket(const QString &host, const QString & url , Q_UINT16 port ){
// String zuruecksetzen
_readSocket = "";
_url = url;
_host = host;
_status=FALSE;
_error = "x";
_send = "";
// Verbindung herstellen
_socket->connectToHost( host, port );
// url an Socket schicken
/*QTextStream _sendToSocket (_socket);
QTextOStream(&_send) << "GET " << _url << " HTTP/1.1\n"
<< "Host: " << _host << "\n"
<< "\n";
cout << _send;
_sendToSocket << _send;
*/
}
und die klasse dazu:
class HttpClient: public QObject {
Q_OBJECT
private:
QString _readSocket, _url, _host, _error, _send;
QSocket *_socket;
bool _status;
public:
HttpClient(QObject &w);
~HttpClient();
void conSocket(const QString &host, const QString & url = (QString) "/", Q_UINT16 port = 80);
QString getString();
QSocket* getSocket(){
return _socket;
}
public slots:
void send_Socket();
void read_Socket();
void error_Socket(int);
void write_Socket(int);
};
wenn ich noch etwas nachreichen kann, dann sagt einfach bescheid. es wäre schön, wenn jemand den fehler finden würde ;-)
gruesse reinhard
mit nachfolgender klasse habe ich ein kleines problem. der konstruktor wird aufgerufen, die Verbindung wird auch aufgebaut und dann nur noch fragezeichen ....
das projekt (linkpruefung):
für das ganze exisitiert eine kleine graphische oberfläche. der benutzer drückt nach diversen einstellungen eine button. der verknüpfte slot ruft eine globale methode auf, die dann die eigentliche arbeit übernimmt. die klasse HttpClient soll die kommunikation mit dem webserver übernehmen.
verbindung aufbauen und die Antwort als String zurückgeben.
zuerst habe ich das ganze ohne signals versucht, ging natürlich nicht, also signals connected und debug-ausgaben hinzugefügt (cout << ""). nun mußte sich feststellen, dass nur das erste signal gesendet wird (hostFound()). die restlichen nicht. die syntax müßte stimmen, da ich ja das erste signal entgegennehmen kann. fehlermeldungen kommen keine.
HttpClient::HttpClient(QObject &w){
_socket = new QSocket();
connect( _socket, SIGNAL(hostFound()),SLOT(send_Socket()));
connect( _socket, SIGNAL(connected()),SLOT(send_Socket()));
connect( _socket, SIGNAL(bytesWritten( int )),SLOT(write_Socket(int)));
connect( _socket, SIGNAL(delayedCloseFinished()),SLOT(send_Socket()) );
}
void HttpClient::conSocket(const QString &host, const QString & url , Q_UINT16 port ){
// String zuruecksetzen
_readSocket = "";
_url = url;
_host = host;
_status=FALSE;
_error = "x";
_send = "";
// Verbindung herstellen
_socket->connectToHost( host, port );
// url an Socket schicken
/*QTextStream _sendToSocket (_socket);
QTextOStream(&_send) << "GET " << _url << " HTTP/1.1\n"
<< "Host: " << _host << "\n"
<< "\n";
cout << _send;
_sendToSocket << _send;
*/
}
und die klasse dazu:
class HttpClient: public QObject {
Q_OBJECT
private:
QString _readSocket, _url, _host, _error, _send;
QSocket *_socket;
bool _status;
public:
HttpClient(QObject &w);
~HttpClient();
void conSocket(const QString &host, const QString & url = (QString) "/", Q_UINT16 port = 80);
QString getString();
QSocket* getSocket(){
return _socket;
}
public slots:
void send_Socket();
void read_Socket();
void error_Socket(int);
void write_Socket(int);
};
wenn ich noch etwas nachreichen kann, dann sagt einfach bescheid. es wäre schön, wenn jemand den fehler finden würde ;-)
gruesse reinhard