Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过QTcpSocket进行双向通信_C++_Qt_Raspberry Pi_Qtcpsocket_Qtcpserver - Fatal编程技术网

C++ 通过QTcpSocket进行双向通信

C++ 通过QTcpSocket进行双向通信,c++,qt,raspberry-pi,qtcpsocket,qtcpserver,C++,Qt,Raspberry Pi,Qtcpsocket,Qtcpserver,我正在编写一个通过QTcpSocket在服务器和客户端之间进行通信的应用程序 服务器是标准pc机上带有gui的应用程序 客户端是Raspberry pi上的控制台应用程序 客户端.cpp #include "client.h" #include <QHostAddress> #include <cstdio> Client::Client() : QObject() { socket = new QTcpSocket(this); printf("

我正在编写一个通过QTcpSocket在服务器和客户端之间进行通信的应用程序

服务器是标准pc机上带有gui的应用程序

客户端是Raspberry pi上的控制台应用程序

客户端.cpp

#include "client.h"
#include <QHostAddress>
#include <cstdio>
Client::Client() :
    QObject()
{
    socket = new QTcpSocket(this);
    printf("try to connect.\n");
    connect(socket, SIGNAL(connected()),
            this, SLOT(onConnected()));
    connect(socket, SIGNAL(readyRead()),
            this, SLOT(readyRead()));
}

void Client::onConnected()
{
    printf("Connection established.\n");
//    char buffer[1024];
//    forever
//    {
//        while(socket->canReadLine())
//        {
//            QByteArray ba = socket->readLine();
//            printf("from server: %s", ba.constData());
//        }
//        printf(">> ");
//        gets(buffer);
//        int len = strlen(buffer);
//        buffer[len] = '\n';
//        buffer[len+1] = '\0';
//        socket->write(buffer);
//        socket->flush();
//    }
}
void Client::readyRead(){
    if(socket->canReadLine())
    {
        QByteArray ba = socket->readLine();
        printf("from server: %s", ba.constData());
    }else{
        printf(":(");
    }
}

void Client::connectToServer()
{
    socket->connectToHost(QString("192.168.0.103"), 5100);
}
#include "server.h"
#include <QTcpServer>
#include <QTcpSocket>
#include <cstdio>
#include <QtDebug>

Server::Server(int listenPort)
    :QObject()
{
    port = listenPort;
    server = new QTcpServer(this);
    connect(server, SIGNAL(newConnection()),
            this, SLOT(onNewConnection()));
}

void Server::listen()
{
    server->listen(QHostAddress::Any, port);
}
void Server::sendMessage(QString message){
    qDebug() << message;
    QByteArray response;
    response.append(message);
  qDebug() <<   socket->peerAddress() ;
    socket->write(response);
    socket->flush();
}

void Server::onNewConnection()
{
    socket = server->nextPendingConnection();

    if(socket->state() == QTcpSocket::ConnectedState)
    {

        qDebug()<<socket->peerAddress();\
        emit onConnectionEstablished(socket->peerAddress().toString());

    }
    connect(socket, SIGNAL(disconnected()),
            this, SLOT(onDisconnected()));
    connect(socket, SIGNAL(readyRead()),
            this, SLOT(onReadyRead()));
}

void Server::onReadyRead()
{

    if(socket->canReadLine())
    {
        QByteArray ba = socket->readLine();

        emit onMessageRecieved(QString(ba));



        QByteArray response("maslO!");

        // some code which parses arrived message
        // and prepares response

        socket->write(response);
        socket->flush();
    }
    //else just wait for more data
}

void Server::onDisconnected()
{
    printf("Connection disconnected.\n");
    disconnect(socket, SIGNAL(disconnected()));
    disconnect(socket, SIGNAL(readyRead()));
    socket->deleteLater();
}
服务器,linux mint

QMake version 3.0
Using Qt version 5.2.0 in /home/adam/Qt/5.2.0/gcc_64/lib

您还可以给我一些改进代码的建议吗?

Qt版本是一个骗人的东西,应该没关系。
QMake version 3.0
Using Qt version 5.2.0 in /home/adam/Qt/5.2.0/gcc_64/lib