在服务器端代码中,出现Segmentation Fault错误的原因是在处理客户端请求时,没有正确地接收和发送数据。

首先,需要修正接收userid的代码。在服务器端的handleClientRequest函数中,接收userid的代码应该改为:

ssize_t recvSize = recv(context->sockfd, &userid, sizeof(int), 0);
if (recvSize <= 0) {
    perror("userid接受失败\nrecv");
    return;
}
userid = ntohl(userid); // 将网络字节序转换为主机字节序
printf("客户端已连接\n");
printf("userid:%d\n",userid);

其次,需要修正发送建议的代码。在服务器端的handleClientRequest函数中,发送建议的代码应该改为:

ssize_t sendSize = send(context->sockfd, suggestion, strlen(suggestion) + 1, 0);
if (sendSize == -1) {
    perror("发送失败\nsend");
    return;
}

最后,需要修正客户端的readyRead函数。在客户端的readyRead函数中,解析服务器返回的数据的代码应该改为:

QDataStream in(m_socket);
QString suggestion;
in >> suggestion; // 使用重载的 >> 运算符来读取数据
if (in.status() != QDataStream::Ok) {
    ui->message->append("解析服务器返回的数据失败");
    return;
}
ui->message->append(suggestion);
m_socket->close();

同时,需要在客户端的connected函数中发送userid:

void Procession::connected()
{
    ui->message->append("连接成功");
    QByteArray block;
    QDataStream out(&block, QIODevice::WriteOnly);
    out << static_cast<quint32>(this->userid);
    if (m_socket->write(block) == -1) {
        ui->message->append("发送userid失败");
        m_socket->close();
    }
}

以上修改后,重新编译和运行代码,应该能够解决Segmentation Fault错误,并正确地接收和发送数据。

C语言服务器端与QTcpSocket客户端通信:解决Segmentation Fault问题

原文地址: https://www.cveoy.top/t/topic/fCwZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录