c++ - QT服务器端写函数有错误(在线程0中停止...)

标签 c++ qt

我有一个小型聊天应用程序。我可以从客户端向服务器发送数据,但我不能从服务器向客户端发送数据。
这是我的服务器代码:
.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(), "!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);
//    }  

我的服务器可以从客户端接收数据并很好地显示出来。但是当我想从服务器向客户端发送数据时,它显示了这个错误:

stopped in thread 0 by : exception at 0x5118cf9a, code : 0xc0000005: read access violation at 0x0x, flags=0x0 (first chance)

.
这是什么意思?
我在socket上写数据的错误在哪里?

最佳答案

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

关于c++ - QT服务器端写函数有错误(在线程0中停止...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38761858/

相关文章:

c++ - qdbusxml2cpp 未知类型

c++ - std::deque 内存使用 - Visual C++,以及与其他人的比较

c++ - 将堆栈传递给函数

c++ - 如何将一个范围内的更新索引锁定为最大值?

qt - 使用opencV从RGB图像中提取一个 channel 图像

c++ - 预处理器定义在 Visual Studio 中有效,在 Qt-creator 中无效

qt - 在 QtCreator 中构建失败时发出声音信号

c++ - 在 QAbstractItemModel 中返​​回正数行和零列是否可以?

c++ - 在 CLion 中,仅 header 库 : file "does not belong to any project target, code insight features might not work properly"

c++ - "function template has already been defined"使用 "std::enable_if_t"