中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java網絡編程基礎知識整理

發布時間:2021-08-16 18:08:32 來源:億速云 閱讀:135 作者:chen 欄目:開發技術

本篇內容介紹了“Java網絡編程基礎知識整理”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

目錄
  • 網絡編程

    • 1.1 概述

    • 1.2、網絡通信的要素

      • 1.網絡編程中有兩個主要的問題

      • 2.網絡編程中的三要素

    • 1.3、IP

      • 1.4、端口

        • 1.5、通信協議

          • UDP協議

          • TCP協議

        • 1.6、TCP模擬通信

        • 1.7、UDP

          • 1.8、URL

            • 實例:


        網絡編程

        1.1 概述

        1.2、網絡通信的要素

        如何實現網絡通信?

        1.網絡編程中有兩個主要的問題
        • 如何定位到網絡上的一臺或者多臺主機

        使用cmd——>ping命令,ping一個域名,可以看到訪問的主機的IP地址

        [外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ztQmkDEl-1628853105623)(D:\learningappDataSave\Typora\image\image-20210809212819370.png)]

        • 找到主機之后,如何進行通信。

        2.網絡編程中的三要素
        • IP

        • 端口號

        • 網絡通信協議(udp,tcp類)

        1.3、IP

        要想讓網絡中的計算機能夠互相通信,必須為每臺計算機指定一個標識號,通過這個標識號來指定要接收數據的計算機和識別發送的計算機,而lP地址就是這個標識號。也就是設備的標識

        ip地址:InetAddress

        • 使用IP可以唯一定位一臺網絡上的計算機

        • 本機IP 127.0.0.1 本機localhost(唯一一個沒網也能ping得通得ip)

        • ip地址的分類

          • ipv4/ipv6

          • 公網(互聯網)/私網(局域網)

        可以用InetAddress查詢Ip地址。

        public class TestInetAddress {
            public static void main(String[] args) {
                try {
                    //查詢網站IP地址
                    InetAddress ip1 = InetAddress.getByName("www.baidu.com");
                    System.out.println(ip1);//www.baidu.com/163.177.151.109
                    //查詢本機
                    InetAddress ip2 = InetAddress.getLocalHost();
                    System.out.println(ip2);//飛雷神/192.168.153.1
                } catch (UnknownHostException e) {
                    e.printStackTrace();
                }
        
            }
        }

        還有一個InetSocketAddress類

        1.4、端口

        網絡的通信,本質上是兩個應用程序的通信。每臺計算機都有很多的應用程序,那么在網絡通信時,如何區分這些應用程序呢?如果說IP地址可以唯一標識網絡中的設備,那么端口號就可以唯一標識設備中的應用程序了。也就是應用程序的標識

        • 不同的進程有不同的端口號,用來區分應用程序

        • 被規定

          • TCP 0~65535

          • UDP 0~65535

          • 單個協議下,端口不沖突就可以使用。

        • 端口分類

          • HTTP:80

          • HTTPS:443

          • FTP:21

          • Telent:23

          • 公有端口0~1023

        • 程序注冊端口012~49151

          • Tomcat:80

          • mysql:3306

          • Oracle:1521

          • 動態、私有

        1.5、通信協議

        協議:計算機網絡中,連接和通信的規則被稱為網絡通信協議

        UDP協議

        用戶數據報協議(User Datagram Protocol)

        • UDP是無連接通信協議,即在數據傳輸時,數據的發送端和接收端不建立邏輯連接。簡單來說,當一臺計算機向另外一臺計算機發送數據時,發送端不會確認接收端是否存在,就會發出數據,同樣接收端在收到數據時,也不會向發送端反饋是否收到數據。

        • 由于使用UDP協議消耗資源小,通信效率高,所以通常都會用于音頻、視頻和普通數據的傳輸

        • 例如視頻會議通常采用UDP協議,因為這種情況即使偶爾丟失一兩個數據包,也不會對接收結果產生太大影響。但是在使用UDP協議傳送數據時,由于UDP的面向無連接性,不能保證數據的完整性,因此在傳輸重要數據時不建議使用UDP協議

        TCP協議

        傳輸控制協議(Transmission Control Protocol)

        • TCP協議是面向連接的通信協議,即傳輸數據之前,在發送端和接收端建立邏輯連接,然后再傳輸數據,它提供了兩臺計算機之間可靠無差錯的數據傳輸。在TCP連接中必須要明確客戶端與服務器端,由客戶端向服務端發出連接請求,每次連接的創建都需要經過“三次握手”

        • 三次握手:TCP協議中,在發送數據的準備階段,客戶端與服務器之間的三次交互,以保證連接的可靠

        第一次握手,客戶端向服務器端發出連接請求,等待服務器確認

        第二次握手,服務器端向客戶端回送一個響應,通知客戶端收到了連接請求

        第三次握手,客戶端再次向服務器端發送確認信息,確認連接

        形象記憶
        三次握手(連接)
        A:你愁啥?	 發送請求
        B:瞅你咋地?	回應請求
        A:來干一場!	確認鏈接
        
        
        四次揮手:(斷開)

        1.6、TCP模擬通信

        客戶端

        1.連接服務器

        2.發送消息

        import java.io.IOException;
        import java.io.OutputStream;
        import java.net.InetAddress;
        import java.net.Socket;
        import java.net.UnknownHostException;
        
        //客戶端
        public class TcpClientDemo01 {
        
            private static OutputStream os;
            private static Socket socket;
        
            public static void main(String[] args) {
        
                try {
                    //1.獲得服務器的地址、端口號
                    InetAddress serverIP = InetAddress.getByName("127.0.0.1");
                    int port=9999;//服務器的端口號
                    //2.創建一個Sock連接
                    socket = new Socket(serverIP,port);
                    //使用該鏈接發送IO流消息
                    os = socket.getOutputStream();
                    os.write("你好,吃飯了嗎?".getBytes());
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {//關閉資源
                    if(os!=null){
                        try {
                            os.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    if (socket != null) {
                        try {
                            socket.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        }
        服務器

        1.建立服務的端口

        2.等待用戶連接

        3.接收用戶的消息

        import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
        
        import java.io.IOException;
        import java.io.InputStream;
        import java.net.ServerSocket;
        import java.net.Socket;
        
        public class TcpServerDemo01 {
        
            private static ServerSocket serverSocket;
            private static Socket socket;
            private static InputStream stream;
            private static ByteOutputStream baos;
        
            public static void main(String[] args) throws IOException {
                try {
                    //給自己一個地址,端口號
                    serverSocket = new ServerSocket(9999);
                    while(true) {
                        //等待客戶端連接
                        socket = serverSocket.accept();
                        //讀取客戶端的消息
                        stream = socket.getInputStream();
        
                        //管道流
                        baos = new ByteOutputStream();
                        byte[] bytes = new byte[1024];
                        int len;
                        while ((len = stream.read(bytes)) != -1) {
                            baos.write(bytes, 0, len);
                        }
                        System.out.println(baos.toString());
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    baos.close();
                    try {
                        stream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    try {
                        socket.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    serverSocket.close();
                }
        
            }
        }
        文件上傳

        客服端上傳文件

        import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream;
        import java.io.ByteArrayInputStream;
        import java.io.FileInputStream;
        import java.io.InputStream;
        import java.io.OutputStream;
        import java.net.InetAddress;
        import java.net.Socket;
        
        public class TcpClientDemo02 {
            public static void main(String[] args) throws Exception {
                //創建一個Socket連接
                Socket socket = new Socket(InetAddress.getByName("127.0.0.1"), 9000);
                //socket的輸出流
                OutputStream os = socket.getOutputStream();
                //讀取文件的流
                FileInputStream fis = new FileInputStream("bg.jpeg");
                //寫出文件
        
                byte[] bytes = new byte[1024];//緩沖區
                int len;
                while ((len = fis.read(bytes)) != -1) {//讀到緩沖區
                    os.write(bytes, 0, len);//從緩沖區寫到輸出流
                }
        
                //通知服務器,我已經上傳完成
                socket.shutdownOutput();
        
                //接收確定服務器接收完畢的信息,斷開連接
                InputStream inputStream = socket.getInputStream();
                ByteOutputStream bost = new ByteOutputStream();
                byte[] bytes2 = new byte[1024];
                int len2;
                while ((len2 = inputStream.read(bytes2)) != -1) {
                    bost.write(bytes2,0,len2);
                }
                System.out.println(bost.toString());
        
                //關閉資源
                bost.close();
                inputStream.close();
                fis.close();
                os.close();
                socket.close();
            }
        }

        服務器接收文件

        package com.yong.tcp;
        
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.InputStream;
        import java.io.OutputStream;
        import java.net.ServerSocket;
        import java.net.Socket;
        
        public class TcpServerDemo02 {
            public static void main(String[] args) throws IOException {
                //創建鏈接
                ServerSocket serverSocket = new ServerSocket(9000);
                //監聽客戶端的連接
                Socket socket = serverSocket.accept();
                //獲取輸入流
                InputStream inputStream = socket.getInputStream();//阻塞式監聽,會一直等待
        
                //文件輸出
                FileOutputStream fos = new FileOutputStream("receiver.jpeg");
                byte[] bytes = new byte[1024];
                int len;
                while ((len = inputStream.read(bytes)) != -1) {
                    fos.write(bytes, 0, len);
                }
        
                //通知客戶端,我已接收完畢
                OutputStream os = socket.getOutputStream();
                os.write("我接收完畢了,可以斷開鏈接了".getBytes());
        
                //關閉資源
                os.close();
                fos.close();
                inputStream.close();
                socket.close();
                serverSocket.close();
        
            }
        }

        1.7、UDP

        UDP消息發送(聊天實現)

        發送方

        package com.yong.chat;
        
        import java.io.BufferedReader;
        import java.io.InputStreamReader;
        import java.net.DatagramPacket;
        import java.net.DatagramSocket;
        import java.net.InetSocketAddress;
        
        public class ChatSendDemo01 {
            public static void main(String[] args) throws Exception {
                //建立一個端口
                DatagramSocket socket = new DatagramSocket(8888);
        
                //建立一個包裹
                //準備數據,從控制臺
                BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        
                while (true) {
        
                    String data = reader.readLine();//控制臺控制輸入
                    byte[] datas = data.getBytes();
                    DatagramPacket packet = new DatagramPacket(datas, 0, data.length(), new InetSocketAddress("localhost", 9999));
        
                    //發送包裹
                    socket.send(packet);
        
                    if ("bye".equals(data)) {
                        break;
                    }
        
                }
                socket.close();
            }
        }

        接收方

        import java.net.DatagramPacket;
        import java.net.DatagramSocket;
        
        public class ChatReceiverDemo01 {
            public static void main(String[] args) throws Exception {
                DatagramSocket socket = new DatagramSocket(9999);
        
                while (true) {
        
                    //準備接收包裹
                    byte[] bytes = new byte[1024];
                    DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);
        
                    socket.receive(packet);//阻塞式接受包裹
                    byte[] data = packet.getData();//拿出消息
                    String receiveData = new String(data, 0, data.length);//轉為字符串,注意不要導錯包
        
                    System.out.println(receiveData);
        
                    //退出接收
                    if ("bye".equals(receiveData.trim())) {
                        break;
                    }
        
                }
                socket.close();
            }
        }

        1.8、URL

        實例:

        爬取網絡資源,url是網絡資源的地址

        import java.io.FileOutputStream;
        import java.io.InputStream;
        import java.net.HttpURLConnection;
        import java.net.URL;
        
        public class UrlDown {
            public static void main(String[] args) throws Exception {
                //下載地址,
                URL url = new URL("https://m701.music.126.net/20210813190206/833ba2325a035b223f2f315a7a5b1d4f/jdyyaac/0353/055e/565e/4910a621a524e5158013a4ccdad535d9.m4a");
        
                //連接到這個資源
                HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        
                InputStream is = connection.getInputStream();
                FileOutputStream fos = new FileOutputStream("富士山下(陳奕迅).m4a");
        
        
                byte[] bytes = new byte[1024];
                int len;
                while ((len = is.read(bytes)) != -1) {
                    fos.write(bytes, 0, len);
                }
        
                fos.close();
                is.close();
                connection.disconnect();//斷開連接
            }
        }

        “Java網絡編程基礎知識整理”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

        向AI問一下細節

        免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

        AI

        札达县| 泾阳县| 永顺县| 盐边县| 沧源| 黎平县| 太湖县| 新密市| 乐东| 灵川县| 朝阳区| 龙陵县| 兴隆县| 龙口市| 洱源县| 翼城县| 民权县| 南澳县| 嵩明县| 宜川县| 尚义县| 正镶白旗| 新建县| 大足县| 临湘市| 安宁市| 沙坪坝区| 阳谷县| 介休市| 星座| 习水县| 乐陵市| 方山县| 绥宁县| 海伦市| 海原县| 玉林市| 阳城县| 会理县| 黎城县| 茌平县|