Ich habe eine kleine Chat-Anwendung. Ich kann Daten vom Client zum Server senden, aber ich kann keine Daten vom Server zum Client senden.
dies ist mein Server-Code:
.proQT Serverseite hat einen Fehler in der Schreibfunktion (gestoppt in Thread 0 ...)
QT += core
QT += network
QT -= gui
TARGET = QServer
CONFIG += console
CONFIG -= app_bundle
TEMPLATE = app
SOURCES += main.cpp \
tcpserver.cpp
HEADERS += \
tcpserver.h
//===========================TCPServer.h
#ifndef TCPSERVER_H
#define TCPSERVER_H
#include <QObject>
#include <QDebug>
#include <QTcpSocket>
#include <QTcpServer>
class TCPServer : public QObject
{
Q_OBJECT
public:
explicit TCPServer(QObject *parent = 0);
~TCPServer();
signals:
public slots:
void newConnection();
void disconnected();
void readyRead();
void writeData(QString data);
private:
QTcpServer *serv;
QTcpSocket *socket;
};
#endif // TCPSERVER_H
//===========================TCPServer.cpp
#include "tcpserver.h"
TCPServer::TCPServer(QObject *parent) : QObject(parent)
{
serv=new QTcpServer(this);
connect(serv,SIGNAL(newConnection()),this,SLOT(newConnection()));
if(!serv->listen(QHostAddress::Any,3490))
{
qDebug()<<"Server Error in Connecting...."<<serv->errorString();
}
else
qDebug()<<"Server Started :) ";
}
TCPServer::~TCPServer()
{
disconnected();
}
void TCPServer::newConnection()
{
socket=serv->nextPendingConnection();
connect(socket,SIGNAL(disconnected()),this,SLOT(disconnected()));
connect(socket,SIGNAL(readyRead()),this,SLOT(readyRead()));
socket->write("Hello Client");
socket->flush();//clean the buffer
socket->waitForReadyRead(3000);
// sock->close();
}
void TCPServer::disconnected()
{
socket->close();
qDebug()<<"Good By :) ";
}
void TCPServer::readyRead()
{
//qDebug()<<"Server is Reading ...."<<socket->readAll();
while(socket->canReadLine())
{
QByteArray ba = socket->readLine();
if(strcmp(ba.constData(), "!exit\n") == 0)
{
socket->disconnectFromHost();
break;
}
//printf(">> %s", ba.constData());
qDebug() << "Server is receiving ...."<<ba.constData();
}
}
void TCPServer::writeData(QString data)
{
socket->write(data.toStdString().c_str());
socket->flush();//clean the buffer
socket->waitForReadyRead(3000);
}
//===========================TCPServer/main.cpp
#include <QCoreApplication>
#include "tcpserver.h"
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
TCPServer srv;
// while(1)
// {
QTextStream s(stdin);
QString value = s.readLine();
srv.writeData(value);
// }
mein Server Daten vom Client empfängt und zeigt es sehr gut. aber wenn ich Daten senden will vom Server zum Client zeigt es mir diesen Fehler:
blieb Thread 0 von: Ausnahme bei 0x5118cf9a, Code: 0xc0000005: las Zugriffsverletzung bei 0x0x, flags = 0x0 (erste Chance)
.
was bedeutet es?
Wo ist mein Fehler beim Schreiben von Daten auf Socket?
Haben Sie versucht, in einem Debugger ausgeführt, um den Absturz in Aktion zu fangen? Dann können Sie sehen, wo in Ihrem Code es passiert, und auch Variablen untersuchen, um zu sehen, dass ihre Werte in Ordnung sind. –
Entschuldigung. wie geht das? Ich versuche es zu fangen. aber kein Fehler zeigt mir –
Ihre IDE sollte eine Taste oder Menü-Alternative haben, um im Debugger zu laufen. Fang dort an. –