ENUMリファレンス(下記)を書くときに何がソケットに書き込まれますか?私はwhiresharkに取り込まれた何かを持っていますが、ENUMの名前 "JOIN"に似ていません。同じ長さでもありません。サーバーは何とかこのコードがJOIN列挙を送信したことを理解しています。enumが書き込まれたときにソケットにC++が書き込むもの
#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));
私は、積分値が書かれ始めている
ソケットに列挙型を書き込むことは、私に切迫した運命を感じさせます。 – Corbin
これは 'm_Command'が* native endian *にあるもののバイト表現を書いています。おそらく、それは4バイト整数を書いています。しかし、異なるコンパイラやアーキテクチャ間でコードを堅固にしたい場合は、ネットワークエンディアンで固定長の整数を使用してください(['htonl(3)'](http://linux.die.net/man/3/htonl ))。または、より良い方法では、[protobuf](http://code.google.com/p/protobuf/)などのシリアライズ/マーシャリングライブラリを使用します。 –
私のアプローチをサポートしてクライアントを書き直す理由がもっと...私はサーバーを変更することはできません。残念ながら、私はまだ印刷文のコンパイルと追加の贅沢はありません。 – jcalfee314