Как отправить RakNet пакет и получить ответ?

408
14 января 2018, 05:29

Нужно отправить пакет (под видом клиента) на сервер Minecraft PE и получить ответ. Нашел статью на вики, описывающую взаимодействия клиента и сервера, однако отправить нужный мне пакет (0x01) и получить ответ не получается. После отправки пакета с id 0x01 сервер просто не возвращает ответ.

Код который у меня получился:

#include <string>
#include <iostream>
#include "RakPeerInterface.h"
#include "MessageIdentifiers.h"
#include "BitStream.h"
#include "RakPeer.h"
#include "RakNetTypes.h"
#include "PacketPriority.h"
using namespace RakNet;
using namespace std;
#define SERVER_ADDR "94.250.***.***"
#define SERVER_PORT 19132
#define MAX_CONNS 50
RakNet::RakPeerInterface *peerInterface;
RakNet::Packet *packet;

int checkresp() {
  int stop = 0;
  while (true) {
    packet=peerInterface->Receive();
    if (packet) {
      switch (packet->data[0])
      {
        case ID_CONNECTION_REQUEST_ACCEPTED:
        printf("The connection to the server has been accepted.\n");
        break;
        case ID_UNCONNECTED_PING_OPEN_CONNECTIONS:
        cout << "Server is open...\n";
        cout << packet->data[1] << '\n';
        cout << packet->data[2] << '\n';
        cout << packet->data[3] << '\n';
        cout << packet->data[4] << '\n';
      }
      std::cout << "/* message */" << '\n';
      stop = 1;
    }
    if (stop) {
      break;
    }
  }
  cout << "ok\n";
  return 1;
}
int main()
{
    peerInterface = RakNet::RakPeerInterface::GetInstance();
    RakNet::SocketDescriptor sock(49152, 0);
    peerInterface->Startup(1,&sock, 1);
    printf("Client is connecting to %s:%d\n", SERVER_ADDR, SERVER_PORT);
    peerInterface->Connect(SERVER_ADDR, SERVER_PORT, 0,0);
    checkresp();
    RakNet::BitStream myStream;
    myStream.Write((unsigned char)0x01);
    myStream.Write(0x00000000003c6d0d);
    myStream.Write(0x00ffff00fefefefefdfdfdfd12345678);
    peerInterface->Send(&myStream, HIGH_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_RAKNET_GUID, true, 1);
    checkresp();
    cout << 666 << '\n';
    RakNet::RakPeerInterface::DestroyInstance(peerInterface);
    return 0;
}
READ ALSO
Сортировка вставками C++(std::vector&lt;int&gt;)

Сортировка вставками C++(std::vector<int>)

Сортирую интовый вектор, не мог понять как происходит выход за границы массивы, вот код:

199
Свой список C++

Свой список C++

Есть список MyListМне нужно чтобы в методе addItem вызывался копирующий конструктор класса у объекта переданного в метод addItem, а не только класса...

188
C++ Класс Binary перегрузка оператора &ldquo;+&rdquo;

C++ Класс Binary перегрузка оператора “+”

У меня задание реализовать класс Binary и перегрузить в классе оператор +Я это реализовал, но при выводе выдает неправильный результат

243
Многопоточность - в чём смысл std::thread.join()?

Многопоточность - в чём смысл std::thread.join()?

Сколько использую потоки, никогда их не join()-ил

265