Вот резюме, я отправляю пакет с сервера клиенту, запущенному на том же компьютере. По какой-то причине отправленный пакет не совпадает с полученным.
Вот подробности:
Пакет был отправлен с использованием RakNet с вызывающей функцией:
rakPeer->Send(&bitStream, MEDIUM_PRIORITY, RELIABLE_ORDERED, 0, UNASSIGNED_RAKNET_GUID, true);
Вот первые 10 байтов пакета, отправленного сервером:
27,50,39,133,202,135,0,0,0,99 … еще 1180 байтов
Вот первые 10 байтов пакета, видимого принимающим клиентом (Примечание: 50% времени это правильно, другая половина — это):
27,50,43,40,247,134,255,255,255,99 … еще 1180 байт
Первый байт ID_TIMESTAMP
, Байты 2-5 содержат метку времени, которую я предполагаю RakNet портит как-то. Байт 6 — это упакованный идентификатор, который четко изменен, а также следующие 3 байта.
Я подозреваю, что ошибка в некоторой степени вызвана длиной пакета, поскольку меньшие пакеты, похоже, отправляются без каких-либо обнаруживаемых ошибок, однако я понимаю, RakNet автоматически обрабатывает повреждение пакета и внутренне разделяет пакет, если он слишком большой.
Любая помощь приветствуется.
Хорошо для тех, кто имеет ту же проблему, вот решение.
Временные метки RakNet бывают 32- или 64-битными в зависимости от конфигурации вашей сборки. В этом случае я отправлял 32-битные метки времени, используя 64-битную сборку. Это нет-нет, так как RakNet изменит биты, которые он считает временной меткой, для учета относительного времени между компьютерами.
Других решений пока нет …