что с ++ записывает в сокет при записи enum - PullRequest
0 голосов
/ 31 марта 2012

Что записывается в сокет, когда я пишу ссылку на 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 ]

0 голосов
/ 31 марта 2012

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

0 голосов
/ 31 марта 2012

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

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

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