write()
コマンドを使ってソケットに書き込んでみました。書き込む必要のあるデータは構造体タイプであり、データ型char
とint
データ型の両方の値が含まれています。しかし、サーバーソケットにデータを書き込むと、int
変数の値が破損します。私は16777216
いつものように価値を受け取っています。
私はSolaris
機械から機械へと書いていLinux
ます。Solaris
は32ビットマシンでLinux
あり、64ビットマシンです。これは私の問題に影響を及ぼしますか?
サーバーとの間でeger値を渡すためにhtonl
/ntohl
とその逆を使用しました。int
しかし、構造体タイプ全体をソケットに書き込んでいる場合、これをどのように使用できますか?誰かが私がこれを整理するのを手伝ってもらえますか?
PCHAR data = NULL;
int size = sizeof(WSMsg);
int retry = 10;
data = new char [sizeof(WSMsg)];
memcpy(data, msg, sizeof(WSMsg));
int n = write(fd, &data[0], size);
これは私のコード部分です。WSMsg
これは構造体タイプでありint
、char
タイプ値があります。
char
数値、型の値を含むデータベーステーブルから特定の行を書き込んでいます。そして、私はこのように異なるテーブルの異なる行を書いています。したがって、htonl
/を使用する必要がある場合ntohl
は、これらの数値をすべてネットワークバイトに変換する必要があります。整数型の値を持つテーブルとその構造が20以上あるので、これらすべてを変換して送信するのは時間のかかる作業になります。