3

sendtoおよびrecvfrom関数を使用して winsock 経由でデータを交換していますが、それぞれの 2 番目のパラメーターはchar* bufです。MyStruct*のようなカスタム データを送信したいのですが、 void*で動作するこれらの関数の類似物が見つかりません。残念ながら、データを文字列形式で送信してから解析すると、遅くて効果がない可能性があります。それでも、プログラマーにそのような方法でデータを送信することを強制する強い理由があるのでしょうか? 状況に関する情報や提案は大歓迎です。前もって感謝します。

4

2 に答える 2

4

とにかく、ソケットが生のバイトで動作するchar*かどうかは関係ありません。void*バッファをキャストするだけ(char*)です

于 2012-11-27T11:13:50.443 に答える
3

ポインターやハンドルが含まれてstructおら、同じコンパイラーとコンパイル フラグを使用してレシーバーが作成されていて、移植性 (ビッグエンディアン アーキテクチャなど) を気にしない場合は、MyStruct*tochar*をキャストするだけで動作します。 .

それ以外の場合は、恐ろしい死に方をします。いいえ、真剣に。うまくいきません。ポインタとハンドルは別のマシンでは意味がありません。別のコンパイラまたはコンパイル フラグを使用すると、structレイアウトやパディングがわずかに異なり、役に立たなくなる可能性があります。

通常、ネットワークを介して構造を送信するには、ごくわずかな例外を除いて、シリアライゼーションが必要です。

于 2012-11-27T12:23:58.163 に答える