JavaEE基礎(二十六)/網路

來源:互聯網
上載者:User

標籤:擷取ip   共用   擷取   equals   連接埠   tom   驅動程式   接收   length   

 

1、網路編程(網路編程概述)
  • A:電腦網路
    • 是指將地理位置不同的具有獨立功能的多台電腦及其外部裝置,通過通訊線路串連起來,在網路作業系統,網路管理軟體及網路通訊協定的管理和協調下,實現資源共用和資訊傳遞的電腦系統。
  • B:網路編程
    • 就是用來實現網路互連的不同電腦上啟動並執行程式間可以進行資料交換。
2、網路編程(網路編程三要素之IP概述)
  • 每個裝置在網路中的唯一標識
  • 每台網路終端在網路中都有一個獨立的地址,我們在網路中傳輸資料就是使用這個地址。 
  • ipconfig:查看本機IP192.168.12.42
  • ping:測試連接192.168.40.62
  • 本地迴路地址:127.0.0.1 255.255.255.255是廣播位址
  • IPv4:4個位元組組成,4個0-255。大概42億,30億都在北美,亞洲4億。2011年初已經用盡。 
  • IPv6:8組,每組4個16進位數。
  • 1a2b:0000:aaaa:0000:0000:0000:aabb:1f2f
  • 1a2b::aaaa:0000:0000:0000:aabb:1f2f
  • 1a2b:0000:aaaa::aabb:1f2f
  • 1a2b:0000:aaaa::0000:aabb:1f2f
  • 1a2b:0000:aaaa:0000::aabb:1f2f
3、網路編程(網路編程三要素之連接埠號碼概述)
  • 每個程式在裝置上的唯一標識
  • 每個網路程式都需要綁定一個連接埠號碼,傳輸資料的時候除了確定發到哪台機器上,還要明確發到哪個程式。
  • 連接埠號碼範圍從0-65535
  • 編寫網路應用就需要綁定一個連接埠號碼,盡量使用1024以上的,1024以下的基本上都被系統程式佔用了。
  • 常用連接埠
    • mysql: 3306
    • oracle: 1521
    • web: 80
    • tomcat: 8080
    • QQ: 4000
    • feiQ: 2425
4、網路編程(網路編程三要素協議)
  • 為電腦網路中進行資料交換而建立的規則、標準或約定的集合。
  • UDP
    • 面向無串連,資料不安全,速度快。不區分用戶端與服務端。
  • TCP   * 連線導向(三向交握),資料安全,速度略低。分為用戶端和服務端。
    • 三向交握: 用戶端先向服務端發起請求, 服務端響應請求, 傳輸資料
5、網路編程(Socket通訊原理圖解)
  • A:Socket通訊端概述:
    • 網路上具有唯一標識的IP地址和連接埠號碼組合在一起才能構成唯一能識別的標識符通訊端。
    • 通訊的兩端都有Socket。
    • 網路通訊其實就是Socket間的通訊。
    • 資料在兩個Socket間通過IO流傳輸。
    • Socket在應用程式中建立,通過一種綁定機制與驅動程式建立關係,告訴自己所對應的IP和port。
6、網路編程(UDP傳輸)
  • 1.發送Send
    • 建立DatagramSocket, 隨機連接埠號碼
    • 建立DatagramPacket, 指定資料, 長度, 地址, 連接埠
    • 使用DatagramSocket發送DatagramPacket
    • 關閉DatagramSocket
  • 2.接收Receive
    • 建立DatagramSocket, 指定連接埠號碼
    • 建立DatagramPacket, 指定數組, 長度
    • 使用DatagramSocket接收DatagramPacket
    • 關閉DatagramSocket
    • 從DatagramPacket中擷取資料
  • 3.接收方擷取ip和連接埠號碼
    • String ip = packet.getAddress().getHostAddress();
    • int port = packet.getPort();
7、網路編程(UDP傳輸最佳化)
  • 接收端Receive
  • DatagramSocket socket = new DatagramSocket(6666);                       //建立socket相當於建立碼頭DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);       //建立packet相當於建立集裝箱while(true) {    socket.receive(packet);                                             //接收貨物    byte[] arr = packet.getData();    int len = packet.getLength();    String ip = packet.getAddress().getHostAddress();    System.out.println(ip + ":" + new String(arr,0,len));}
  • 發送端Send

    DatagramSocket socket = new DatagramSocket();       //建立socket相當於建立碼頭Scanner sc = new Scanner(System.in);while(true) {    String str = sc.nextLine();    if("quit".equals(str))        break;    DatagramPacket packet =                             //建立packet相當於建立集裝箱            new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);    socket.send(packet);            //發貨}socket.close();
8、網路編程(UDP傳輸多線程)
  • A發送和接收在一個視窗完成

    public class Demo3_MoreThread {    /**     * @param args     */    public static void main(String[] args) {        new Receive().start();        new Send().start();    }}class Receive extends Thread {    public void run() {        try {            DatagramSocket socket = new DatagramSocket(6666);                   //建立socket相當於建立碼頭            DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);   //建立packet相當於建立集裝箱            while(true) {                socket.receive(packet);                                             //接收貨物                byte[] arr = packet.getData();                int len = packet.getLength();                String ip = packet.getAddress().getHostAddress();                System.out.println(ip + ":" + new String(arr,0,len));            }        } catch (IOException e) {            e.printStackTrace();        }    }}class Send extends Thread {    public void run() {        try {            DatagramSocket socket = new DatagramSocket();       //建立socket相當於建立碼頭            Scanner sc = new Scanner(System.in);            while(true) {                String str = sc.nextLine();                if("quit".equals(str))                    break;                DatagramPacket packet =                             //建立packet相當於建立集裝箱                        new DatagramPacket(str.getBytes(), str.getBytes().length, InetAddress.getByName("127.0.0.1"), 6666);                socket.send(packet);            //發貨            }            socket.close();        }  catch (IOException e) {            e.printStackTrace();        }    }}
9、網路編程(UDP聊天圖形化介面、UDP聊天發送功能、UDP聊天記錄功能、UDP聊天清屏功能、UDP聊天震動功能、UDP聊天快速鍵和代碼最佳化、UDP聊天產生jar檔案)10、網路編程(TCP協議)
  • 1.用戶端
    • 建立Socket串連服務端(指定ip地址,連接埠號碼)通過ip地址找對應的伺服器
    • 調用Socket的getInputStream()和getOutputStream()方法擷取和服務端相連的IO流
    • 輸入資料流可以讀取服務端輸出資料流寫出的資料
    • 輸出資料流可以寫出資料到服務端的輸入資料流
  • 2.服務端
    • 建立ServerSocket(需要指定連接埠號碼)
    • 調用ServerSocket的accept()方法接收一個用戶端請求,得到一個Socket
    • 調用Socket的getInputStream()和getOutputStream()方法擷取和用戶端相連的IO流
    • 輸入資料流可以讀取用戶端輸出資料流寫出的資料
    • 輸出資料流可以寫出資料到用戶端的輸入資料流
11、網路編程(TCP協議代碼最佳化)
  • 用戶端

    Socket socket = new Socket("127.0.0.1", 9999);      //建立Socket指定ip地址和連接埠號碼InputStream is = socket.getInputStream();           //擷取輸入資料流OutputStream os = socket.getOutputStream();         //擷取輸出資料流BufferedReader br = new BufferedReader(new InputStreamReader(is));PrintStream ps = new PrintStream(os);System.out.println(br.readLine());ps.println("我想報名就業班");System.out.println(br.readLine());ps.println("爺不學了");socket.close();
  • 服務端

    ServerSocket server = new ServerSocket(9999);   //建立伺服器Socket socket = server.accept();                //接受用戶端的請求InputStream is = socket.getInputStream();       //擷取輸入資料流OutputStream os = socket.getOutputStream();     //擷取輸出資料流BufferedReader br = new BufferedReader(new InputStreamReader(is));PrintStream ps = new PrintStream(os);ps.println("歡迎諮詢傳智播客");System.out.println(br.readLine());ps.println("報滿了,請報下一期吧");System.out.println(br.readLine());server.close();socket.close();
12、網路編程(服務端是多線程的)
ServerSocket server = new ServerSocket(9999);   //建立伺服器    while(true) {        final Socket socket = server.accept();              //接受用戶端的請求        new Thread() {            public void run() {                try {                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));                    PrintStream ps = new PrintStream(socket.getOutputStream());                    ps.println("歡迎諮詢傳智播客");                    System.out.println(br.readLine());                    ps.println("報滿了,請報下一期吧");                    System.out.println(br.readLine());                    socket.close();                } catch (IOException e) {                    e.printStackTrace();                }            }        }.start();    }}
13、網路編程(練習)
  • 用戶端向伺服器寫字串(鍵盤錄入),伺服器(多線程)將字串反轉後寫回,用戶端再次讀取到是反轉後的字串
14、網路編程(練習)
  • 用戶端向伺服器上傳檔案

JavaEE基礎(二十六)/網路

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.