ネットワーク通信プロトコルとUDPののJava基盤--tcp

個人的な理解:

  通常の使用パターンは、両方の組み合わせです、異なるUDPとTCPを区別することを学ぶ!より良い輸送のために、多くの場合、伝送のために複数のスレッドを開きます!

ネットワーク通信プロトコル:

1、TCP / IPプロトコル:

四層:アプリケーション層、トランスポート層、ネットワーク層およびリンク層:

リンク層:リンク層は、物理伝送チャネルを定義するために使用され、通常、特定のプロトコル・ネットワーク用の駆動装置に接続された、例えば、光学ドライブ、ケーブルが提供さ。

ネットワーク層:ネットワーク層は、主に伝送されるデータパケットのために使用されるTCP / IPプロトコルの核心である先のコンピュータまたはネットワークにパケットデータを送信します。

トランスポート層:ネットワーク通信時の通信ネットワークは、TCPプロトコルを使用することができる主なプログラムは、UDPプロトコルを使用することができます。

アプリケーション層:例えばHTTPプロトコル、FTPプロトコルとして、プロトコルのアプリケーションのために主に責任を負います。

2、IPアドレスとポート番号:

一意のコンピュータを識別する①、IPアドレス:

  以前はIPV4、IPV6は現在、アドレスの16バイトです。

②、ポート番号:2バイト:0〜65535。一般的には1024以上のポート番号。

3、InetAddressクラス:

 

{クラスDemo01公共
    パブリック静的な無効メイン(文字列[] argsが){UnknownHostExceptionがスロー
        のInetAddressのINET = InetAddress.getByName( "192.168.1.163")を、自身である// IPアドレスの
        対象から取得// IPアドレス
        のSystem.out .println(inet.getHostAddress());
        //ホスト名を取得
        するSystem.out.println(inet.getHostNameを());
        //取得ローカルホストのIPオブジェクト
        のInetAddress inet2 =のInetAddress.getLocalHost();
        System.out.printlnは( inet2.getHostAddress());
        のSystem.out.println(inet2.getHostName());
    }
}

 

 二、UDPおよびTCPプロトコル:

1、UDPプロトコル:

  ユーザーデータグラムプロトコルユーザーデータグラムプロトコル - コネクションレスプロトコル:あなたは浸る、データの整合性を保証することはできません!64K以下です。

2、TCPプロトコル:

  伝送制御プロトコル---伝送制御プロトコル接続指向の通信プロトコル。

データが送信される前に、送信側への論理接続を確立し、送信前にデータの端部を受けます。

  TCP接続は、各接続が通過する必要が作成し、明確なクライアントとサーバー、クライアントからサーバーへの接続要求でなければなりません「3ウェイハンドシェイク。」最初のハンドシェークは、クライアントは、サーバが、第二のハンドシェイクを確認するために、サーバは、クライアントに応答を送信するために待機して、サーバへの接続要求を送信し、クライアントは、通知の接続要求、第三握手、再びサーバーにクライアントを受け取ります接続を確認する確認メッセージを送信します。

三、UDP通信:

1、のDatagramPacket:データパッケージクラス:

通信を送信または受信するためのUDPカプセル化データ。

2、DatagramSocketの:「ターミナル」:データ・パケットを送受信することができますのDatagramPacket

 

インポートにjava.io.IOException;
輸入java.net.DatagramPacket。
インポートjava.net.DatagramSocket;
輸入java.net.InetAddress;
輸入java.net.SocketExceptionが、
輸入java.net.UnknownHostExceptionを発行。

//送信側
パブリッククラスUDPSend {
    公共の静的な無効メイン(文字列[]引数)にIOException {スロー
        //カプセル化されたデータの
        バイト= "こんにちはUDP" .getBytes()[]バイト;
        // IPアドレスカプセル化
        のInetAddress INET =のInetAddress。 getByName( "127.0.0.1");
        // 1。送信するデータをカプセル化するオブジェクト、長さ、IPアドレスとポート番号の受信端パッキングデータ作成
        のDatagramPacket新しい新しいDP =(バイト、bytes.length、INET、6000)ののDatagramPacketのを、
        2 // DatagreamSocketオブジェクト(エクスプレス)を作成し
        たDatagramSocket DSをDatagramSocketの新しい新=();
        //パケットを送信3.。
        ds.send(DP)を;
        //解放資源
        ds.closeを();
    }
}

 

 

インポートにjava.io.IOException;
輸入java.net.DatagramPacket。
インポートjava.net.DatagramSocket;
輸入java.net.SocketExceptionが、

//受信端
パブリッククラスUDPReceive {
    公共の静的な無効メイン(文字列[] argsが)にIOException {スロー
        // DatagramSocketオブジェクト、クリアポート番号作成
        DatagramSocketの新しい新しいDS =たDatagramSocket(6000)
        。2 //入ってくるバイト配列を処理する責任を作成しますするデータ
        []バイト=新しい新しいバイト[1024]バイト;
        .. 3 //オブジェクトアンパックデータ作成
        のDatagramPacket新しい新しいDP =(バイト、bytes.length)ののDatagramPacketのを;
        // 4パケットを受信する。
        ds.receive(DP)。
        // 5開梱
        //取得し、受信データ長
        INT長= dp.getLength();
        //送信元のIPアドレスを取得する
        文字列をdp.getAddress IP =()はgetHostAddress();.
        //送信側のポート番号を取得
        INTをポート= dp.getPort()。
        System.out.println( "IPアドレス:" + IP + "ポート番号" +ポート+ "コンテンツ伝送がある:" +新しい新しい文字列(バイト0、長さ));
    }
}

 

 四、TCP通信:

1、ServerSocketのカテゴリ:サーバー側; Socketクラス:クライアント。

 

 

 

//クライアント
のパブリッククラスれるtcpClient {
    公共の静的な無効メイン(文字列[] args)はUnknownHostExceptionが、IOExceptionが{スロー
        // 1.明確に接続するためのソケットオブジェクト、サーバーのアドレスとポート番号を作成
        ソケットソケット=新しいソケット(「127.0.0.1 "8888);
        // 2明確なデータソース。
        FileInputStreamの新しい新しいFISはのFileInputStream(=" D:\\ \\「JavaのA.TXTを);
        ... 3 //オブジェクトのsockeからバイトストリームの出力を取得し、読んで準備ができてサーバファイルのバイトが書かれ
        たOutputStream Socket.getOutputStream OUT =を();
        ... 4は、コピーを開始//
        int型のlen = 0;
        バイト[]バイト=新しい新しいバイト[1024];
        しばらく((LEN = fis.read(バイト))! -1 =){
            out.write(バイト0、LEN);
        }
        //出力ストリームの最後に、サーバはエンドに伝え、読んでいない
        socket.shutdownOutputを();
        戻り//受信サーバ
        //バイトのソケットの入力ストリームからオブジェクトを取得し、データ・サーバの応答が受信
        Socket.getInputStream =()に入力ストリームを、
        LEN = in.read(バイト)
        のSystem.out.println(新しい新しい文字列(バイト0、 LEN));
        //リリースリソース
        Socket.close();
        fis.close();
    }
}

 

図2に示すように、マルチスレッド転送:

 

//スレッドのタスクオブジェクト
のパブリッククラスのアップロードを実装したRunnable {
    プライベートソケットソケット。

    パブリックアップロード(){
    }。

    公共のアップロード(ソケットソケット){
        this.socket =ソケット。
    }。

    空パブリック(){RUN
        たFileOutputStreamのFOS =ヌル;
        試み{
            //明らか先3.
            ファイルファイル=新しい新しいファイル( "D:\\ NiHao");
            ディレクトリが存在しない//場合は、作成
            するif(file.existsを! ()){
                file.mkdirs();
            }
            文字列のファイル名= "オラクル" +のSystem.currentTimeMillis()+ ".txtファイル";
            //クリア先
            FOS =新しい新たFileOutputStream(File.separator + +ファイル名のファイル);
            //クリアデータソース
            Socket.getInputStreamにおける入力ストリーム=();
            コピーを開始//
            INT LEN = 0;
            バイト[]バイト=新しい新しいバイト[1024];
            ながら(!(LEN = in.read(バイト))= -1){
                fos.write(バイト、0、LEN);
            }
            クライアントに応答//
            //は、バイトの出力ストリームを取得し、クライアントに応答
            )のOutputStream Socket.getOutputStream OUT =(;
            out.write( "成功したアップロード" .getBytes()) ;
        }キャッチ(IOExceptionをEX){
            ex.printStackTrace();
        }最後に{
            //リリースリソース
            試し{
                fos.close();
            }キャッチ(IOExceptionをE){
                // TODO自動生成されたブロックキャッチ
                e.printStackTrace();
            }
        }

    }
}

 

 

パブリッククラスデモ{

    静的な無効メインパブリック(String []型引数)はIOExceptionが{スロー
        ... 1つの//サーバーオブジェクト作成された
        ServerSocketをサーバーに新しい新しい= ServerSocketを(8888);
        ながら、(真の){
            //接続クライアントオブジェクト取得作成
            (ソケットソケット= server.acceptを) ;
            / * //スレッド(スレッドの作成タスク)を作成し
            、新たな新しいスレッド(新しい新しいアップロード(ソケット))スタート();. * /
            //スレッドのタスクを作成
            アップロード新しいアップ新しい=アップロード(ソケット);
            //スレッドオブジェクトの作成
            スレッドのスレッドを=スレッド新新(アップ);
            //オープンスレッド
            Thread.start();
           
        }

    }

}

 

おすすめ

転載: www.linuxidc.com/Linux/2019-07/159674.htm