これはもっと一般的な簡単な質問です。 でも、C#、Python、C、C++などのように。ソケットプログラミング
すべての基本的な「ソケット」ネットワークプログラミングは本質的に同じですか?すべての人がBerkleyソケットを使用しているのと同じように(私はそう呼ばれていると思います)、各言語にはソケットを行う独自の方法があります。
おかげ
これはもっと一般的な簡単な質問です。 でも、C#、Python、C、C++などのように。ソケットプログラミング
すべての基本的な「ソケット」ネットワークプログラミングは本質的に同じですか?すべての人がBerkleyソケットを使用しているのと同じように(私はそう呼ばれていると思います)、各言語にはソケットを行う独自の方法があります。
おかげ
ソケットはプラットフォームに依存している、いない言語に依存。したがって、linuxはBSDソケットだけを使用しています.WindowsはBSDソケット(ほとんど独占的に使用される)とソケットのM $フレーバ(WSAと呼ばれます)を提供します。これは、フードの中で、より正確にはOSのカーネルレベルで見つかったものにすべて沸き立っています。ソケット実装は、共有オブジェクト/動的リンクライブラリを介してカーネル/ユーザ空間にアクセスできるようにするために最初のAPIセットを提供し、c/C++言語を "ネイティブに"サポートします。他のすべての言語は、OSがC/C++用にネイティブに提供するSO/DLLファイルへの言語固有のバインディングに依存しています。
HTH
ソケットはC、C++、Java(登録商標)、Rubyで基本的に同じです。高級言語では、クラスでのビルドがボイラープレートを扱うので、やや簡単です。 Cでソケットコードを書くことができれば、翻訳するための参照があればどこでもそれを行うことができます。
@Kellogsは良い点を示しています。WindowsはPosixの実装よりも(通常は)優れたパフォーマンスをWindows独自のSocket APIを備えています。 APIは非常に似ています。私はDirectXにOpenGLの類推をします。あなたが本当に1つを知っているなら、あなたは参照で他のものを見つけることができます。
ここでは、言語と、その言語からアクセスできるクラスライブラリと、基本となるオペレーティングシステムとを区別していません。ここに私の説明はあります
C、C++、C#、Java - ネットワークプログラミングに関する特別なサポートはありません。
Javaクラスライブラリ、.Net Framework、C++標準ライブラリ - この中でC#&は、ネットワークプログラミングのいくつかのクラスを提供しています。 C++標準ライブラリはネットワークプログラミングクラスを提供しません(ファイルのiostreamのみ、stdinput &の文字列を使用できます)。しかし、C++のBOOSTライブラリは、ネットワークプログラミングのクラスを提供します。私は他の図書館を知らない。
OS - オペレーティングシステムは、上記のクラスライブラリによって利用される基本API(主にC言語)を提供します。ウィンドウズの場合はwinsock api(WSA)、unixの場合はBSDソケットapiです。私はウィンドウがある程度BSD apiをサポートしているので、学習曲線が少なくなると思います。しかし、@EnabrenTaneはそれ以上のことを言っています。
上記kellogsに同意します。 Windows &ほとんどの主要なPOSIX準拠のOSは、基本的なBSDソケットAPIをサポートしています。バークレーソケットに加えて、各プラットフォームはパフォーマンス向上のために独自のAPIを提供しています&スケーラビリティ強化。これらの拡張APIは、I/O操作(すなわち、ディスクファイル、名前付きパイプなど)で動作するため、ソケットにのみ限定されているわけではありません。たとえば、従来のselect()& poll()に加えて、Linuxには独自のepollメカニズムがあり、BSDにはkqueueがあり、WindowsにはWSAevent *、WSAaAsync *、I/O完了ポートAPIがあります。 これらの違いは、主にC、C++、Pascalなどの低レベル言語で表示されます。
C#、Java、Python、Ruby et al。Cと比較していくらか「高レベル」です - 低レベルのAPIからあなたを守るための堅牢な技術を提供します。ベアボーンソケットAPIを直接操作するのではなく、各プラットフォームで提供される広範なランタイムクラスライブラリを使用できます。たとえば、PythonでTCP/IPサーバーを作成するには、単純にSocketServerクラスを使用します。同様にC#では、netのdownladファイルにWebClientを使用できます。 C++ではBoostライブラリがあります。もちろん、あなたのアプリでraw socket API directlyを使用することを妨げるものは何もありません。
私はWPAについて聞いたことがありません、あなたはWSAを意味しますか? IIRCは実際には異なるソケットではありません。ソケットに接続することができ、WSAソケットまたはBSDソケットの場合は違いはありません。 WSA APIは便利なヘルパーです。ソケットイベントが発生した場合にウィンドウメッセージを取得する。 – Niki
oops。 WSA、はい。 Windowsメッセージといくつかの相違点 - http://msdn.microsoft.com/en-us/library/ms742212%28v=vs.85%29.aspxからdwFlags paramを確認してください。あなたは、http://msdn.microsoft.com/en-us/library/ms740506%28v=vs.85%29.aspx – kellogs
のOkフラグを取得しています。それで.....すべての人が話している「生の」ソケットAPIバークリーのものじゃないの? Btw私は主にUnixに関心がありました.....彼らの "Raw socket" APIは何ですか?いずれにしても、私はSyntaxがかなり類似していると思っていて、それほど変わっていないのですか? BSDはunixのPOSIXに置き換えられました。 –