blog

jdkソースコード java.netパッケージ

私はまだチャンスがありますか?まず、有名なネットパッケージネットパッケージはもっと有名なパッケージであるべきで、このパッケージの内容は複雑ではありませんが、このパッケージのJavaの実装から、あなたは...

Mar 4, 2020 · 4 min. read
Share this

私にチャンスはありますか?

I. 有名なネットバッグ。

netパッケージは、より有名なパッケージである必要があります、このパッケージの内容は複雑ではありませんが、このパッケージのJavaの実装から、より良いネットワークプログラミング関連の知識、このパッケージの関連知識に精通することができ、関連するネットワークの例外が発生した瞬時にソースコードレベルに配置することができます、クール。

ソケット

ソケット構造はネットワーク操作を抽象化したもので、主なメソッドは以下の通りです。

  • connect サーバーに接続します。
  • close ソケットを閉じます。
  • bind クライアントのポートを設定します。バインドされていない場合、クライアントはランダムなポート番号を生成します。
  • setImpl このメソッドは jdk 内でよく使われます。

以下はwindows用のjdk実装です。

ソケット通信はクインテットによって識別され、接続操作の前にクインテットを設定する必要があります。

SocketImplのこのメソッドのソケット固有の実装は、ソケットのみの簡略化された操作は、外部インターフェイスを呼び出します。

SocketImpl の実装では、以下のようにアダプタ・パターンを使用します:

PlainSokcetImplは、アダプタのパターンであり、その具体的な実装はDualStackPlainSocketImpl、TwoStacaksPlainSocketImpl、2つのクラスの具体的な実装は、内部の2つのクラスに配置され、2つのクラスは、関数ライブラリを提供するosを呼び出すことを理解することができます。

以下のクラスを見ると

SocksSokcetImpl このクラスは PlainSocketImpl を継承しています。

以下の接続例外を見てください。

III.ファイルディスクリプタについて

この作品は実に興味深いもので、アクセプトはブロックリスニングを行います。接続が来るのをリッスンするたびに、FDファイル記述のdeputyを作成します。このFDは現在のセッションの通信を提供します。通信が完了すると、この記述子は手動で閉じる必要があります。次の図に示すように、クライアントも接続時にFDを作成します。

各接続は、指定されたファイル記述子を開きます。ファイル記述子の数には制限があり、制限を超えるとエラーが報告されます。

注意: 接続を表すファイル記述子は、接続が行われたときにのみ作成されます。tcpは3ウェイハンドシェイクを確立し、その結果ソケットファイルが作成されます。ソケットソケットは常に形式的なものであり、接続の作成はファイルの作成です。

IV.一般的なソケットの例外

ソケットは、多くの場合、IOExceptionのサブクラス、データcheckExceptionでスローされ、あなたはそれに対処するための間違った方法を実行するプログラムで指定する必要があります。

拘束の例外。

  • BindException : バインド例外。クライアントまたはサーバの起動時に、2つのポートが重複している場合にスローされます。

接続時の例外

  • ConnectException: この例外は、接続時にサーバーに接続できない場合に発生します。

V. 関連するローカルメソッド

 /** 
 * @Param fd ファイル記述子
 * @Param localAddress ローカルアドレス
 * @Param localPort ローカルポート
 */ 
 static native void bind0(int fd, InetAddress localAddress, int localport,boolean exclBind) throws IOException; 
 /**対応するソケットを作成する
 @stream true はtcp、falseはudpを意味する。
 @param v6only
 @resturn ファイル記述子を返す
 */
 static native int socket0(boolean stream, boolean v6Only) throws IOException; //connect操作は、ファイル記述子に対応させる必要がある。
 /** * 接続を確立するためにtcpハンドシェイクを3回行う
 * @Param fd ファイル記述子
 * @Param remote リモートIP
 * @Param remotePort リモートポート
 */
 static native int connect0(int fd, InetAddress remote, int remotePort)throws IOException;
 /**
 * サーバー側のリスニング操作
 * @Param fd ファイル記述子
 * @Param isaa サーバーがリッスンするアドレス情報
 */
 static native int accept0(int fd, InetSocketAddress[] isaa) throws IOException;
 /**
 * リスニング設定
 * @Param fd ファイル記述子
 * @Param backlog キューのサイズ
 */
 static native void listen0(int fd, int backlog) throws IOException;}

6、finalizeメソッド

対応するfinalizeメソッドのAbstractPlainSocketImplのソケットは、ソケットに対応するファイル記述子情報を閉じます。だから、この場所は、一般的な問題をfianlizeメソッドを持って、ソケットオブジェクトがすぐにごみ収集期間、Socekt接続の数が多いによってリサイクルされない、頻繁にごみ収集につながる可能性があります。

URLConnection

javaの生みの親が書いたこのクラスは、内部の設計の詳細を深く掘り下げる価値があります。

URLとはUniform Resource Identifierのことで、固定形式の文字列によってリソースを単純に識別するURIの一種です。

、jdkにはHttpサービスが付属しています

IX.レストンプレート

これはspringがhttpリクエストサービスを提供するもので、下はまだソケット開発に基づいています。

X. まとめ

インターネットには知らないことがたくさんあります。それをゆっくり見ることで、これまで暗記していた概念のいくつかが明確になります

  • ファイル・ディスクリプタ、プロセスがオープンできるファイル・ディスクリプタの数には制限があります。
  • jdkのネイティブメソッドは非常に興味深いもので、その多くが数字の0で終わっています。

文章が乱雑、内容が断片的、ネットワークプログラミングに関する知識の強化が必要。

Read next

JSは2つのオブジェクトが等しいかどうかを判断する

1. 文字列比較 2. 浅い比較 3. 深い比較

Mar 4, 2020 · 2 min read