Что с ++ записывает в сокет при записи enum

Что записывается в сокет, когда я пишу ссылку на ENUM (ниже)? У меня есть что-то, захваченное в whireshark, но оно не похоже на имя ENUM "JOIN" .. это тоже не одинаковая длина. Сервер почему-то понимает, что этот код отправил перечисление JOIN.

#include <sstream>
#include <iostream>

... WriteToSocket( SOCKET hSocket, char *buf, int iCount)
  send(hSocket, buf, iCount, 0);


enum { JOIN, ...};
m_Command = JOIN;
WriteToSocket (hSocket, (char *)&m_Command, sizeof(m_Command));

Я надеюсь, что я включил достаточно информации и включить заявления...

2 ответа

Решение

Интегральное значение начинается с письменного. Размер varaible может варьироваться. В вашем случае размер может быть от 1-байтового нуля до intнулевой размер

Чтобы увидеть, что именно пишется, добавьте этот код:

std::cout << "Size: " << sizeof(m_Command) << " Value: " << (int)m_Command << "\n";

Если я правильно понял, вы предполагаете, что "JOIN" передается по сети в виде строки. Это не правильно. JOIN псевдоним для целочисленного значения (0, если это первый член перечисления). Это целочисленное значение передается по сети, сервер знает это; это конкретное целочисленное значение является псевдонимом для "JOIN". Вот почему ваш сервер работает как положено.
Также вы не можете видеть "JOIN" в виде строки в журналах Wireshark, но целочисленное значение, которое является псевдонимом "JOIN".

Другие вопросы по тегам