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以上あるので、これらすべてを変換して送信するのは時間のかかる作業になります。