Что с ++ записывает в сокет при записи 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".