[Java]ソケットプログラミングネットワークプログラミング

Javaはネットワーク関連のクラスライブラリ、痛みのないネットワークを提供し、基礎となる詳細はJVMコントロールに渡されます。

Javaはクロスプラットフォームのネットワークライブラリを実装し、私たちの開発は統一されたネットワークプログラミング環境に直面しています

 

目的:

ネットワークプロトコルを介して他のコンピューターデータと直接または間接的に通信および通信する

主な問題:

ネットワーク上の1つまたは複数のコンピューターを正確に特定し、ホスト上の特定のアプリケーションを特定する

ホストを見つけた後にデータを確実かつ効率的に転送する方法

 

通信要素:

IPおよびポート番号

TCP / IPプロトコル

 

IP:ネットワーク内のコンピューターの一意の識別子

ローカルループバックアドレス、127.0.0.1ホスト名:LocalHost

IPアドレスの分類:IPV4 IPV6

v4〜4バイト、4〜0〜255合計約42億個、北米では30億個、アジアでは4億個、2011年に使い尽くされ、

v6-128ビット16バイト8符号なし整数、各整数は4桁の16進数で表され、各数値はコロンで区切られます

アドレスによる分類:パブリックアドレス[World Wide Webの使用]およびプライベートアドレス[LANの使用]

192.168.0.0-192.168.255.255は、組織によって内部的に使用されます

    static  void socket01IP_Address()throws UnknownHostException {
         // DNSドメインネームシステム
         // localhost / 127.0.0.1本机地址 
        InetAddress localhost = InetAddress.getByName( "localhost" ); 
        System.out.println(localhost); 

        InetAddress a = InetAddress.getByName( "www.cnblogs.com" ); 
        System.out.println(a); 
        // www.baidu.com/14.215.177.38
         // www.acfun.cn/117.21.225.193
         // www.bilibili.com/119.3.70.188
         // www.cnblogs.com/101.37.113.127 

        InetAddress localHost =InetAddress.getLocalHost(); 
        System.out.println(localHost); 

        文字列アドレス = localHost.getHostAddress(); 
        String hostName = localHost.getHostName(); 

    }

 

ポート番号は、コンピューターで実行されているプロセス(プログラム)です。

異なるプロセスには異なるポート番号があります

16ビット整数0〜65535として定義

既知のポート0〜1023事前定義されたサービス通信はHTTP 80、FTP 21、Telnet 23を使用します

登録ポート1024〜49151は、ユーザープロセスまたはアプリケーションTomcat8080、MySQL3306、Oracle1521に割り当てられます。

動的ポート/プライベートポート49152-65535

ソケット=ポート番号+ IPアドレス

 

TCP

-接続を確立し、伝送チャネルを形成する、

-3方向ハンドシェイク確認、ポイントツーポイント通信、信頼性

-TCPアプリケーションプロセスのクライアントとサーバー

-大きなデータを転送できます

-送信が完了し、確立された接続が解放され、効率が低い

UDP

-データのパッケージ化、接続なし

-パッケージあたり64KBの制限サイズ

・相手方の準備の有無、相手方の受け取りの有無に関わらず、返答はありません

-ブロードキャスト送信

-送信の最後に、リソースが順不同で解放され、オーバーヘッドが小さく、速度が速い

 

TCP

public  class TCP_Test { 
    @Test // サーバー
    public  void server()throws Exception {
         // サーバープログラムを作成します 
        ServerSocket server = new ServerSocket(65000 ); 

        Socket client = server.accept(); // 着信クライアントスイートConnection 

        InputStream inputStream = client.getInputStream(); 

        byte [] bytesBuffer = new  byte [512 ]; 

        int len; 

        while((len = inputStream.read(bytesBuffer))!= -1 ){ 
            文字列str= new String(bytesBuffer、0 、len); 
            System.out.println(str); 
        } 

        System.out.println( "サーバーからのメッセージ:クライアントが受信されました:" + client.getInetAddress().getHostAddress() + "Message" ); 

        // リソースを閉じる
        inputStream.close(); 
        client.close(); 
        server.close(); 
    } 

    @Test // クライアント
    public  void client()throws Exception { 

        // これは接続する相手のソケット情報、IP +ポート 
        Socket client = new Socket(InetAddress.getByName( "localhost")、65000 ); 

        OutputStream outputStream= client.getOutputStream(); 
        outputStream.write( "クライアントから送信されたメッセージ:接続成功!!!" .getBytes()); 

        // ストリームオブジェクトリリース
        outputStream.close(); 

        // ソケットリリース
        クライアント。閉じる(); 
    } 
}

 

UDP

public  class UDP_Test { 

    @Test 
    public  void send()throws Exception { 

        DatagramSocket ds = new DatagramSocket(); 

        java.lang.String message = " 送信元からのメッセージ:Hello UDP !!!" ;
        バイト []バイト= message.getBytes(); 
        InetAddress localHost = InetAddress.getLocalHost(); 
        DatagramPacket dp = new DatagramPacket(bytes、0、bytes.length、localHost、65000 ); 

        // 送信送包
        ds.send(dp); 

        ds.close(); 
    } 

    @Test
    public  void receive()例外をスローします{ 
        DatagramSocket ds = new DatagramSocket(65000 ); 

        バイト []バッファ= 新しい バイト [1024 ]; 
        DatagramPacketパケット = 新しい DatagramPacket(buffer、0 、buffer.length); 
        ds.receive(packet); 

        System.out.println(new String(packet.getData()、0 、packet.getLength())); 

        ds.close(); 
    } 

}

 

URL

Uniform Resource Locator Uniform Resource Locator。ネットワークのリソースアドレスを表します

-特定のURIであり、URLを使用してリソースを識別でき、このリソースを見つける方法を示します

-転送プロトコルホスト名ポート番号ファイル名フラグメント名?パラメータリスト

一般的なポート番号は80です

#クリップ名は、特定のパーツを見つけるためのアンカーポイントです

パラメータリストはKVペアですか?K1 = v1のように、複数のパラメータがある場合は、使用して接続します

public  class URL_Test {
     public  static  void main(String [] args)throws Exception { 
        String url = "https://www.ygo-sem.cn/photo/story-430.aspx" ; 

        URL url_link = 新しいURL(url) ; 

        System.out.println( "プロトコル名:" + url_link.getProtocol()); 
        System.out.println( "ホスト名:" + url_link.getHost()); 
        System.out.println( "ポート番号:" + url_link.getPort()); // -1は 
        System.out.println( "ファイルパス:" + url_link.getPath()); 
        System.out。println( "ファイル名:" +url_link.getFile()); 
        System.out.println( "查询名:" + url_link.getQuery()); 
    } 
}

 

おすすめ

転載: www.cnblogs.com/mindzone/p/12755692.html