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の(最初のチャンス)
。
どういう意味ですか?
ソケットの書き込みデータにエラーがありますか?
実際のクラッシュをキャッチするためにデバッガで実行しようとしましたか?次に、コード内のどこで発生しているのかを確認したり、変数を調べて値が正しく見えるかどうかを調べることができます。 –
申し訳ありません。どうやってするか?私は試してみる。エラーは私には表示されません –
IDEには、デバッガで実行するためのボタンやメニューの選択肢が必要です。そこから始めよう。 –