QT服务器端写入功能出错(在线程0..中停止)
QT server side has error in write function (stopped in thread 0...)
我有一个小型聊天应用程序。我可以将数据从客户端发送到服务器,但不能将数据从服务器发送到客户端
这是我的服务器代码:
.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答案)
相关文章:
- C/C++ Linux 上的多线程服务器/客户端崩溃
- C++多线程服务器
- 多线程客户端/服务器原型中的分割故障
- 卫生多线程服务器
- 在多线程c++服务器应用程序中处理非常量全局配置
- 多线程服务器在一个线程中处理多个客户端
- c++tcp多线程客户端/服务器-如何与线程套接字处理程序进行通信
- 多线程客户端中 COM 对象的初始化和实例化
- 在 GDB 中调试多线程服务器 - 查找每个线程的状态.执行时继续并停止
- 多线程服务器在不等待客户端连接的情况下退出
- 多线程服务器不工作
- 多线程服务器
- 调试多线程服务器
- 套接字在多线程服务器中不能正确接受
- C++具有 Winsock 和 std::thread 的多线程服务器
- c++中的多线程服务器,如何很好地终止线程和清理
- 多线程服务器设计
- 创建多线程服务器的问题
- 多线程客户端未从服务器接收消息
- 使用QtConcurrent::运行的线程服务器