Как получить данные в socket.io с помощью c ++ - PullRequest
0 голосов
/ 02 июля 2019

У меня небольшой проект, использующий socket.io на c ++, мне нужно получить данные с моего сервера socket.io с помощью узла js, я использую socket.io с использованием c ++ в Qt, у меня есть работающий код при подключениина сервер socket.io, но у меня нет данных, полученных в моем приемнике qt socket.io.

Я использую этот код для получения данных.

//. H

  private:

  void OnNewMessage(std::string const& name,message::ptr const& data,bool hasAck,message::list &ack_resp);

  Ui::MainWindow *ui;


 std::unique_ptr<client> _io;

//. Cpp

 MainWindow::MainWindow(QWidget *parent) :
 QMainWindow(parent),
 ui(new Ui::MainWindow),
_io(new client())

{
  ui->setupUi(this);
  using std::placeholders::_1;
  using std::placeholders::_2;
  using std::placeholders::_3;
  using std::placeholders::_4;
 _io->connect("http://127.0.0.1:8080");
 socket::ptr sock = _io->socket();
 sock->on("mapping",std::bind(&MainWindow::OnNewMessage,this,_1,_2,_3,_4));    
 }


 void MainWindow::OnNewMessage(const std::string &name, const message::ptr &data, bool hasAck, message::list &ack_resp)
{
 if(data->get_flag() == message::flag_object)
{
     std::string msg = data->get_map()["message"]->get_string();
  }
}

1 Ответ

0 голосов
/ 02 июля 2019

connect соответствует потоковому сокету (TCP), а нотация сообщения соответствует дейтаграммному сокету (UDP). для TCP вы должны использовать readAll ():

void MainWindow::connectTcp()
{
    QByteArray data; // <-- fill with data

    _pSocket = new QTcpSocket( this ); // <-- needs to be a member variable: QTcpSocket * _pSocket;
    connect( _pSocket, SIGNAL(readyRead()), SLOT(readTcpData()) );

    _pSocket->connectToHost("127.0.0.1", 9000);
    if( _pSocket->waitForConnected() ) {
        _pSocket->write( data );
    }
}

void MainWindow::readTcpData()
{
    QByteArray data = pSocket->readAll();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...