7

Java 仮想マシンでソケットがどのように実装されているか知りたいです。

  • ネイティブ ライブラリは含まれていますか?
  • もしそうなら、それは C ライブラリですか?

このトピックに関する情報はどこにありますか? ネットワーキングに関する公式のJava チュートリアルは役に立ちません。

いくつかの興味深いリンクが役立ちます。

更新: Sun から提供された公式情報はありますか?

前もって感謝します!

編集 私は証明を見つけました。私は自分の答えを正しいものとしてマークします。オスカーのおかげで、それは私にとって完璧なヒントでした!!! ありがとう!

4

3 に答える 3

5

おそらく、基礎となるプラットフォームによって公開されているsystem-Vソケット呼び出しを使用しています。たとえば、Unixのsystem-V、WindowsのWinSockなどです。仕様は、仮想マシンがどのように動作する必要があるかを規定しているだけなので、実装者は自由に好きなようにできます。

于 2009-01-13T06:52:48.957 に答える
5

Java はオープン ソースであるため、ソース コードを取得して、自分のペースでクラスを詳しく調べることができます。

あなたの質問への最初の簡単な答えとして、私が非常に簡単なスキャンで見つけたものは次のとおりです。

private native void socketConnect(InetAddress address, int port, int timeout)

そうそう、ネイティブ ライブラリが含まれており、それは C++ ライブラリだと思います。

いくつかの実装があります (SSLSocket、PlainSocket など)。

JDK7 のオンライン ソースはこちら :S最新かどうかわからない

私は IDE を使用して、すべての JDK インストールに付属するソース コードをナビゲートしました。

Socket http://img83.imageshack.us/img83/5358/socketimpfv3.png のソースを示す IDE スクリーンショット

于 2009-01-13T06:54:44.850 に答える
3

Java 1.4.2のネットワーク ガイドでは、興味深い情報が提供されています。

実装の詳細は...

...SocketImpl/DatagramSocketImpl をサブクラス化しない限り、知る必要はありません。すべての *Socket オブジェクトには、ネイティブ コードに接続する基盤となる SocketImpl/DatagramSocketImpl があります。Impl クラスは、オプションをサポートするために 2 つのメソッドを実装します。

void setOption(int optID, Object val) は SocketException をスローします。オブジェクト getOption(int optID) が SocketException をスローします。

C によく似ています。これらのメソッドは、ネイティブ メソッドへの接着剤として機能し、ネイティブ メソッドが呼び出される前に型の安全性を保証します。

Javaはソケットにネイティブライブラリを使用しています。

于 2009-01-13T17:52:20.310 に答える