web-dev-qa-db-ja.com

Windowsでsys / socket.h関数を使用する

Windows内でsocket.h関数を利用しようとしています。本質的に、私は現在 https://beej.us/guide/bgnet/html/multi/clientserver.html#datagram のサンプルコードを見ています。 socket.hはUnix関数であることを理解しています-とにかく、このサンプルコードをコンパイルしながら、その環境を簡単にエミュレートできますか?別のIDE /コンパイラは何かを変更しますか?

そうでなければ、仮想化されたLinux環境を利用する必要があると思います。コードはUNIX環境で実行される可能性が高いため、とにかく最適です。

ありがとう。

27
BSchlinker

次の2つのオプションがあります。

  1. Cygwin (Unixエミュレーションライブラリ)を使用します。
  2. Winsock (Windows標準ライブラリ)へのポート。

Cygwin:Unixソースをほとんど手付かずにコンパイルできますが、Cygwinエミュレーションライブラリに結び付けます。これには2つの意味があります。一般的なパフォーマンス(ネットワークのみではない)はおそらく最適ではありません。また、ターゲット環境には(実行時に)Cygwin DLLがインストールされている必要があります。

Winsock:これには、sys/socket.h(BSDソケットライブラリ、TCP/IPスタックのUNIX標準)winsock2.h、およびコードの一部を書き直します-多くではなく、いくつか。

貴重な情報を含む関連する質問:

winsockとBSDソケットの実装の違い

Cygwin [WindowsのLinux]に関するいくつかの問題(ソケット、スレッド、その他のプログラミングおよびシェルの問題)

Winsockの例?

37
leonbloy

クロスプラットフォームネットワークアプリケーションの作成は、BSD標準が提供するものでは簡単ではありません。確かに機能しますが、ioctl(必要な場合)をioctlsocket(windowsで)に置き換えるなど、いくつかの置き換えを行う必要があります。その他の違い ここ

私のアドバイスは、これらのい違いを隠し、コミュニケーションの統一された方法を提供するライブラリを使用することです。私は個人的に [〜#〜] ace [〜#〜] を使用しています。サーバーとクライアントの作成方法を示す多くの例があります。サンプルからコピーして、そこで実行される方法を確認します。メーリングリストも非常に役立ちます(PRFの使用を忘れないでください-Problem-Report-Formのソースツリーを参照)。詳細については、本を借りることができます。重要な注意:aceを使用することにより、ソケット、setsockopt、ioctlなどのACEラッパー関数が機能しないことを心配せずに使用できます。残念ながら、これはライブラリの依存関係を追加しますが、これは必ずしもオプションではありません。しかし、ACEにはもっと強力な機能があり、それらを発見したらきっと気に入っていただけると思います。ヒント:原子炉、原子炉。

1
INS

Winsock ライブラリを探していると思います。

0