Как правильно написать UDP-пакет - PullRequest
1 голос
/ 12 марта 2011

Я пытаюсь переписать часть своего кода из программы на C ++, которую я написал некоторое время назад, но я не уверен, могу ли / как правильно записать в байтовый массив или мне следует использовать что-то еще.Код, который я пытаюсь изменить на C # .NET ниже.

unsigned char pData[1400];
bf_write g_ReplyInfo("SVC_ReplyInfo", &pData, 1400);

void PlayerManager::BuildReplyInfo()
{   
    // Delete the old packet
    g_ReplyInfo.Reset();

    g_ReplyInfo.WriteLong(-1);
    g_ReplyInfo.WriteByte(73);
    g_ReplyInfo.WriteByte(g_ProtocolVersion.GetInt());
    g_ReplyInfo.WriteString(iserver->GetName());
    g_ReplyInfo.WriteString(iserver->GetMapName());
}

1 Ответ

0 голосов
/ 12 марта 2011

BinaryWriter может работать, хотя строки пишутся с предшествующей 7-битной кодированной длиной, которую, я подозреваю, клиент не сможет обработать. Вам, вероятно, придется преобразовать строки в байты, а затем либо добавить слово длины, либо завершить его 0.

Нет необходимости вручную преобразовывать числа в байты. Если у вас есть long, который вы хотите записать как byte, просто приведите его. То есть, если ваш BinaryWriter равен bw, вы можете написать bw.Write((byte)longval);. Для записи -1 как long: bw.Write((long)(-1)).

...