0

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));

十分な情報を含め、ステートメントを含めることを願っています...

4

2 に答える 2

0

私が正しく理解していれば、「JOIN」はネットワークを介して文字列として転送されると想定しています。これは正しくありません。JOIN整数値のエイリアスです(列挙の最初のメンバーの場合は0)。その整数値はネットワークを介して転送され、サーバーはそれを認識しています。その特定の整数値は「JOIN」のエイリアスです。そのため、サーバーは期待どおりに機能します。
また、wiresharkログでは「JOIN」を文字列として表示することはできませんが、「JOIN」のエイリアスである整数値を表示できます。

于 2012-03-30T21:15:04.787 に答える
0

整数値の書き込みを開始します。変数のサイズはさまざまです。あなたのケースでは、サイズは 1 バイトのゼロから最大 - サイズのゼロまでのいずれかintです。

何が書かれているかを正確に確認するには、次のコードを追加します。

std::cout << "Size: " << sizeof(m_Command) << " Value: " << (int)m_Command << "\n";
于 2012-03-30T20:36:45.180 に答える