JAva初級ネットワークプログラミング


ネットワークプログラミングの初級
まず、コンピュータネットワークの知識を思い出しましょう.コンピュータネットワークは異なる分類方式で区分され、異なるタイプに分けることができます.
*ネットワークの規模と範囲によって、ローカルエリアネットワーク、シティエリアネットワーク、広域ネットワークに簡単に分けることができます.
*ネットワークのトポロジー構造によって、星型ネットワーク、バスネットワーク、ループネットワーク、ツリー型ネットワーク、星型ループネットワークなどに分けることができる.
*ツイストワイヤ、同軸ケーブル、配管繊維、実装指輪など、ネットワークの伝送媒体によって区分されます.
OSIの7割のネットワークモデルは、物理層、データリンク層、ネットワーク層、伝送層、セッション層、表示層、応用層である.物理層とデータリンク層はデータ伝送の基礎層であり、ネットワーク層の接続を通じてネットワークサービスデータユニットを交換し、システム間で信頼性があり、透明なデータ伝送を提供し、エンドツーエンドのエラー返信とストリームの制御を提供し、2つのプロセス間の接続管理機能を提供し、伝送されたデータの表現問題を処理し、データ変換、フォーマットとテキスト圧縮を完成し、ユーザーに直接直面する層である.OSIユーザーサービスを提供します.
コンピュータのネットワークの中でかつて多くのプロトコルを学んだことがあって、例えばICMP、UDP、TCP/IPなどのプロトコル、具体的なプロトコルの内容はコンピュータのネットワークのあの本を見ることができて、上はとても詳しく言って、以下TCP/IPプロトコルを言います:IPプロトコル制はコンピュータがパケットのデータを送信して受け入れることができることを保証して、TCPプロトコルは1つの信頼できる、制御可能な情報のストリームの伝送サービスを提供することができます;TCP/IPプロトコルはインターネットができるだけ分散、無秩序なネットワークとなり、TCP/IPはUNIXシステムに最初に登場し、現在ではほとんどのメーカーとオペレーティングシステムがサポートしている.同時に、TCP/IPもインターネットの基礎プロトコルであり、通常は4層モデルと見なすことができる:応用層、伝送層、ネットワーク層およびリンク層、OSIの7層ネットワークプロトコルと比較して記憶することができる.
ネットワークの中でいくつかの非常に重要な属性があって、すなわちIPアドレス、サブネットマスクとポート番号、IPアドレス、周知のように、インターネットの中で自分のコンピュータの位置を表すために用いられて、今のIPV 4は32ビットで、A種類のアドレス、B種類のアドレスとC種類のアドレス、D、Eなどの保留のアドレスに分けて、後でIPV 6はネットカードの増加に従って応用されて、それが64ビットを支持するため、だから、これから数十年か数百年で十分です.一般に、サブネットマスクはIPアドレスに対して区分される.例えば、Aクラスは255.0.0.0、Bクラスは255.255.0.0、Cクラスは255.255.255.255.00である.ポート番号:コンピュータのポートはコンピュータと外部の交流の出入り口で、それはハードウェアとソフトウェアの2つの方面の意味を含んで、ハードウェアの意味の上のポート、よくインタフェースと呼ばれて、例えばいくつかのプロセスは相応のポートを使うことができて、ソフトウェアの意味の上のポート、一般的にネットワークの中で接続サービスと接続サービスのない通信プロトコルのポートに向いて、1種の抽象的なデータ構造です.
IPアドレスを表すクラスがあります.InetAddress:
InetAddressはjavaにあります.Netパッケージには、InetAddressクラスのインスタンスを独自の静的メソッドで得ることができるコンストラクタはありません.
package net;
importjava.net.InetAddress;
importjava.net.UnknownHostException;
public classHello {
      public static void main(String[] args)throws Exception {
           InetAddress ia;
           ia = InetAddress.getLocalHost();
           System.out.println(ia);
      }
}
      IP  :HXJ8Z1OJ7AS96JT/192.168.1.2

Socket:ソケットソケットSocketは、ネットワークベースの別のアプリケーション成語の通信チェーンへの参照を指し、アプリケーションは通常、OSIリファレンスモデルのセッション層にほぼ位置し、2台のコンピュータ間のデータストリーム交換を制御および管理する「ソケット」を介してネットワークに要求または応答する.簡単に言えば、1台のコンピュータと別のコンピュータが会話するsocketは「接続チャネル」を確立し、このチャネルを使用してコンピュータ間でデータを交換することができます.
Socket通信に関連する2つのクラス:java.net.ServerSocket/java.net.Socket、この2つのクラスは双方向の通信を確立するために使用され、Server Socketはクライアントからのアクセスを待つ「サーバ」を確立するために使用され、Socket通信アプリケーションを確立するには、まずサーバ側のアプリケーションを確立する必要があります.
ServerSocketコンストラクタ:
ServerSocket():ポートがバインドされていないSocketを作成します.
ServerSocket(intport):指定したポートportでリスニングSocketを作成します.
ServerSocket(intport,int backlog):接続キューの長さを変更するためのパラメータbacklogを追加します.
ServerSocket(intport,int backlog,InetAddress localAddr):マシンに複数のIPアドレスが存在する場合、localAddrというパラメータでリスニングのIPアドレスを指定できます
ServerSocketのメソッド:
Socket accept():クライアントの接続を受け入れるために使用されます.サーバSocketで作成されたリスニングポートにクライアントが接続されている場合は、Socketインスタンスが返されます.そうでない場合は、待機します.
void close():Socket接続を閉じます.
Socketは、ネットワーク間の通信を表すために使用されます.Socketクラス:
Socket():接続されていないSocketを作成します.
Socket(InetAddressaddress,int port):指定されたホストIPアドレスaddress、ポートport上のSocket接続を確立します.
Socket(String host,intport):指定したホスト名host、ポートport上のSocket接続を確立します.
Socketの一般的な方法:
getInputStream():他のデータストリームと同様にオブジェクトを使用できるInputStreamストリームを取得します.
getoOutputStream():OutputSreamストリームを取得します.
SocketはgetInputStreamとgetOutputStreamでデータを読み書きします.
次の簡単なサーバとクライアントのプログラムです.
       Server.java
package net;
importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.net.ServerSocket;
importjava.net.Socket;
public class Server {
       public static void main(String[] args){
              ServerSocket ss ;
              try {
                     System.out.println("I'mServer Port");
                     ss = newServerSocket(5560);
                     Socket s = ss.accept();
                     System.out.println("oneclient connected!");
                     BufferedReader br = newBufferedReader(new InputStreamReader(s.getInputStream()));
                     System.out.println(br.readLine());
                     br.close();
                     ss.close();
              } catch (IOException e) {
                     e.printStackTrace();
              }
       }
}

       Client.java
package net;
importjava.io.BufferedWriter;
importjava.io.IOException;
importjava.io.OutputStreamWriter;
importjava.net.Socket;
importjava.net.UnknownHostException;
public class Client {
       public static void main(String[] args) {
              Socket s = null;
              try {
                     s = newSocket("localhost",5560);
                     System.out.println("connectedsuccessfully!");
                     BufferedWriter bw = newBufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                     bw.write("O NE");
                     bw.close();
                     s.close();
              } catch (UnknownHostException e) {
                     e.printStackTrace();
              } catch (IOException e) {
                     e.printStackTrace();
              }
       }
}
Server      :
I'm Server Port
one clientconnected!
O N E

少し遅くなったので、先にここに着いて、おやすみなさい、初日は家にいる感じがいいですね~暖かい~でも暑い~