Winsock は Windows OS のネットワークに使用され、BSD は Mac OS と Unix に使用されることを理解しています。上記の 3 つのオペレーティング システムのいずれかで動作する「ユニバーサル」ソケットのタイプはありますか? それとも、異なる OS のクライアントとの互換性のために、サーバーに両方のソケットを組み込む必要がありますか?
4 に答える
ソケットはソケットであり、データをポンピングするだけです。そのため、Windows では Java でプログラムされたサーバーと BSD では C でプログラムされたクライアントを使用でき、それらは引き続き相互に通信できます。
サード パーティのライブラリを使用せずにクロス コンパイルするには、いくつかの #ifdef を使用することで多かれ少なかれ簡単に実行できます。詳細はhttp://tangentsoft.net/wskfaq/articles/bsd-compatibility.html
もう 1 つの方法は、サードパーティのライブラリを使用することです。これはおそらく最も簡単な方法であり、より高度な機能など、他の利点を活用できます。UDT が思い浮かびますが、他にもあります。( http://udt.sourceforge.net/ )
ここにちょっとした秘密があります: Winsock は BSD ソケットに基づいています。winsock ライブラリの初期化と終了を除いて、実際のネットワーク コード ライブラリは BSD ソケットと Windows ソケットで同じです。
Winsock と BSD ソケットは、同じものを実装する 2 つの類似 API の名前です。TCP/IP ソケットは、TCP 接続または UDP データグラム フローのエンドポイントです。実際のトランスポートは TCP/IP RFC によって定義されているため、相互運用できます。したがって、Unix での Winsock 実装、または Windows での BSD Sockets 実装は必要ありません。実際、Winsock は多かれ少なかれ後者であり、あちこちでいくつかの誤解が生じています。
要するに、あなたの質問は本当に意味がありません。
より高度な機能の一部を回避する場合、Winsock は BSD 互換です。非バイトデータを扱うときの秘訣は、エンディアンを尊重することです。アーキテクチャと言語によっては、浮動小数点が扱いにくくなる場合があります。Char配列は物事を予測可能に保ちますが、それは制限になる可能性があります. プロトコルに従っていれば、必要なサーバーは 1 つだけです。