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()); } }