2016-08-04 5 views
1

私は小さなチャットアプリケーションを持っています。クライアントからサーバーにデータを送信できますが、サーバーからクライアントにデータを送信することはできません。
.PROQTサーバー側で書き込み機能にエラーがあります(スレッド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); 
// } 

私のサーバーがクライアントからのデータを受信することができ、それは非常によく示しています
が、これは私のサーバーのコードです。しかし、私は、サーバーからクライアントにデータを送信したいとき、それは私にこのエラーが表示されます。

により、スレッド0で停止:、0x5118cf9aで例外コード:0xc0000005で:0x0xでアクセス違反を読ん を、フラグ= 0x0の(最初のチャンス)


どういう意味ですか?
ソケットの書き込みデータにエラーがありますか?

+0

実際のクラッシュをキャッチするためにデバッガで実行しようとしましたか?次に、コード内のどこで発生しているのかを確認したり、変数を調べて値が正しく見えるかどうかを調べることができます。 –

+0

申し訳ありません。どうやってするか?私は試してみる。エラーは私には表示されません –

+0

IDEには、デバッガで実行するためのボタンやメニューの選択肢が必要です。そこから始めよう。 –

答えて

1

私は入力処理を新しいスレッドに移し、入力を受け取るたびにそのスレッドから信号を出します。 (thugaとして回答)

関連する問題