私はサーバーをC++ Unixスタイルで記述しようとしましたが、Windowsマシンにこだわっています。私はMinGWで始めましたが、正しくコンパイルできず、「sys/socket.h」ファイルが見つからないと言ったのです。もちろん、サーバーが機能するためにも必要です。私はそれを探しに行きましたが、多くのライブラリが付属しているので、どこかでCygwinをインストールするように言われたと思います。さて、インストールしました。それはおそらく私に提供できるすべてのライブラリです。それから私は再びコンパイルに行きました、それでもそれを見つけることができません。フォルダー全体を検索しましたが、ファイルが見つかりませんでした。そのため、私は少し困惑しました(必要のない追加機能のために3時間排水しました)が、検索を続けました。どこでも見つかりません。私はそれを使用するための複数の参照を見つけましたが、それをダウンロードするためにどこでも見つけることができません。過去数時間を検索してきましたが、どこで入手できるかという参照がないため、すべてに非常に不満を感じています(そしてwinsockを使用しません。覚えていれば互換性が損なわれます)。
長い話を簡単に言えば、「socket.h」/「socket.c」/「socket.cpp」ファイルはどこからダウンロードできますか?それは私の人生を(そして他の多くの人の人生を確実にするだろう)SOはるかに簡単で、本当に感謝します!
Windowsにはsys/socket.hがないため、次のようなことを行うことを検討できます。
#ifdef __WIN32__
# include <winsock2.h>
#else
# include <sys/socket.h>
#endif
WinSockを使用しないことを示したことは知っていますが、WinSockはWindowsでTCPネットワーキングが行われる方法であるため、代替手段があることはわかりません。プラットフォームネットワーキングライブラリ、そのライブラリは内部でWinSockを呼び出します。ほとんどの標準BSDソケットAPI呼び出しはWinSockに実装されているので、少し混乱することで、同じソケットベースのプログラムをWindowsと他のOSの両方でコンパイルできます。することを忘れないでください
#ifdef __WIN32__
Word versionWanted = MAKEWORD(1, 1);
WSADATA wsaData;
WSAStartup(versionWanted, &wsaData);
#endif
main()...の上部では、Windowsですべてのソケットコールが失敗します。これは、WSAサブシステムがプロセスに対して初期化されていないためです。
質問C++にラベルを付けたので、 boost :: asio 、 [〜#〜] ace [〜#〜] 、または他のクロスを使用することに興味があるかもしれませんC++またはC用の-platformソケットライブラリ。他のいくつかのクロスプラットフォームライブラリは、 クロスプラットフォーム用C++ソケットライブラリ および クロスプラットフォームネットワーキングAPI への回答にあります。
サードパーティのクロスプラットフォームソケットライブラリを使用することはあなたにとってオプションではないと仮定します...
ヘッダー <sys/socket.h> はIEEE Stdで定義されています。 1003.1(POSIX)ですが、残念ながらWindowsはPOSIX標準に準拠していません。 MinGWコンパイラは、WindowsアプリケーションをコンパイルするためのGCCのポートであるため、これらのPOSIXシステムヘッダーは含まれていません。 Cygwin を使用してGCCをインストールすると、WindowsでPOSIX環境をエミュレートするこれらのシステムヘッダーが含まれます。ただし、a。)のソケットにCygwinを使用する場合は、cygwin DLLをアプリケーションが読み取り可能な場所に配置する必要があります。b。)CygwinヘッダーとWindowsヘッダーの相互作用はあまりよくありません(したがって、windows.h
、その後、おそらくsys/socket.h
)。
個人的な推奨事項は、 VirtualBox 、 buntuのコピーをダウンロード のコピーをダウンロードし、UbuntuをVirtualBoxにインストールしてから、Ubuntuでコーディングとテストを行うことです。あるいは、Microsoftが「UNIXサブシステム」を販売しており、特定のハイエンドエディションのWindowsにプレインストールされていると言われていますが、このシステムがどの程度準拠しているかはわかりません(準拠している場合は、どのエディションUNIX標準に準拠しています)。 Winsocketもオプションです。ただし、署名が類似している場合でも、POSIXの対応するものとは微妙に異なる方法で動作できます。
選択したパッケージでcygwinを再インストールしてみてください:gcc-g ++:gnuコンパイラコレクションc ++(develカテゴリから)、opensshサーバーおよびクライアントプログラム(net)、make:gnuバージョン(devel)、ncursesターミナル(utils)、拡張vimエディター(エディター)、ANSI共通LISP実装(数学)およびlibncurses-devel(lib)。
このライブラリファイルはcygwin\usr\includeにあります。
よろしく。
あなたがしなければならないWindowsソケットライブラリを使用したい場合、私はそれを追加したいと思います:
最初に:WSAStartup()を呼び出します
最後に:WSACleanup()を呼び出します
よろしく;