QT服务器端写入功能出错(在线程0..中停止)

QT server side has error in write function (stopped in thread 0...)

本文关键字:线程 服务器端 功能 出错 QT      更新时间:2023-10-16

我有一个小型聊天应用程序。我可以将数据从客户端发送到服务器,但不能将数据从服务器发送到客户端
这是我的服务器代码:
.pro

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(), "!exitn") == 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);
//    }  

我的服务器可以接收来自客户端的数据,并且显示得非常好。但当我想将数据从服务器发送到客户端时,它会显示以下错误:

在线程0中停止:0x5118cf9a处的异常,代码:0xc0000005:0x0x处的读取访问违规,flags=0x0(第一次机会)


这是什么意思
我在套接字上写入数据的错误在哪里?

我将输入处理移到一个新线程,并在每次收到一些输入时从该线程发出信号。(作为thuga答案)