国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java-Java基礎(chǔ)學(xué)習(xí)(2)-網(wǎng)絡(luò)編程-TCP-UDP

這篇具有很好參考價(jià)值的文章主要介紹了Java-Java基礎(chǔ)學(xué)習(xí)(2)-網(wǎng)絡(luò)編程-TCP-UDP。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

2.網(wǎng)絡(luò)編程

2.1. 通信協(xié)議

  1. TCP、UDP對(duì)比

    • TCP 打電話

      • 連接,穩(wěn)定

      • 三次握手,四次揮手

        三次握手
        A: 你瞅啥?
        B: 瞅你咋地?
        A:干一場(chǎng)!
        
        四次揮手
        A:我要走了
        B: 你真的要走了嗎?
        B:你真的真的要走了嗎?
        A:我真的要走了
        
        
      • 客戶端、服務(wù)端

      • 傳輸完成,釋放連接,效率低

    • UDP 發(fā)短信

      • 不連接,不穩(wěn)定
      • 客戶端,服務(wù)端,沒(méi)有明確的界限
      • 不管有沒(méi)有準(zhǔn)備好,都可以發(fā)給你
      • 導(dǎo)彈
      • DDOS:洪水供給?。柡凸簦?/li>

2.2. Tcp上傳測(cè)試

1、TcpUploadClient.java
    package com.hzs.basic.inet;

import java.io.*;
import java.net.Inet4Address;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;

/**
 * @author Cherist Huan
 * @version 1.0
 * @date 2021/6/8 11:39
 * @note 文件上傳客戶端
 */
public class TcpUploadClient {
    public static void main(String[] args) throws IOException {
        // 1、創(chuàng)建一個(gè)Socket連接
        Socket socket = new Socket(Inet4Address.getByName("127.0.0.1"),9999);

        // 2、創(chuàng)建一個(gè)輸出流
        OutputStream os = socket.getOutputStream();

        // 3、讀取文件
       // FileInputStream fis = new FileInputStream(new File(String.valueOf(TcpUploadClient.class.getResource("6.jpg"))));
    //    URL resource = TcpUploadClient.class.getResource("/images/6.jpg");
    //    FileInputStream fis = new FileInputStream(resource.getPath());

        File file = new File("java-test-questions-06/src/main/resources/images/6.jpg");
       // File file = new File("images/6.jpg");
        System.out.println(file.getAbsolutePath());
        FileInputStream fis = new FileInputStream(file);

        // 4、寫(xiě)出文件
        byte[] buffer = new byte[1024];
        int len;
        while((len = fis.read(buffer))!= -1)
        {
            os.write(buffer,0,len);
        }


        // 通知服務(wù)器,我已經(jīng)傳輸完畢了
        socket.shutdownOutput(); // 我已經(jīng)傳輸完畢

        // 接受服務(wù)器的響應(yīng),確定服務(wù)器接受完畢,才能關(guān)閉連接
        InputStream is2 = socket.getInputStream();
        byte[] buffer2 = new byte[1024];
        int len2;
        ByteArrayOutputStream baos = new ByteArrayOutputStream();


        while((len2 = is2.read(buffer2))!= -1)
        {
         baos.write(buffer2,0,len2);
        }

        System.out.println(baos.toString());

        // 5、關(guān)閉資源
        baos.close();

        fis.close();
        os.close();
        socket.close();
    }
}

    
2TcpUploadServer.java
    package com.hzs.basic.inet;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.URL;

/**
 * @author Cherist Huan
 * @version 1.0
 * @date 2021/6/8 11:39
 *  @note 文件上傳服務(wù)端
 */
public class TcpUploadServer {
    public static void main(String[] args) throws IOException {

        // 1、創(chuàng)建ServerSocket
        ServerSocket serverSocket = new ServerSocket(9999);

        // 2、創(chuàng)建Socket監(jiān)聽(tīng)
        Socket socket = serverSocket.accept();

        // 3、獲取輸入流
        InputStream is = socket.getInputStream();

        // 4、文件輸出

//        URL resource = TcpUploadClient.class.getResource("/images/6_receive.jpg");
//        //FileOutputStream fos = new FileOutputStream(new File(resource.getPath()));
//        FileOutputStream fos = new FileOutputStream(resource.getPath());

        File file = new File("java-test-questions-06/src/main/resources/images/6receive.jpg");
        //File file = new File("images/6_receive.jpg");
        FileOutputStream fos = new FileOutputStream(file);

        byte[] buffer;
        buffer = new byte[1024];
        int len;

        while((len = is.read(buffer))!= -1)
        {
            fos.write(buffer,0,len);
        }


        // 通知客戶端,我已經(jīng)接受完畢
        OutputStream os = socket.getOutputStream();
        os.write("服務(wù)端返回,服務(wù)端已經(jīng)接受完畢了".getBytes());

        // 5、關(guān)閉資源
        os.close();

        fos.close();
        is.close();
        socket.close();
        serverSocket.close();

    }
}

    

總結(jié):

  • 客戶端

    1. 建立socket連接
    2. 創(chuàng)建一個(gè)輸出管道流
    3. 讀取需要上傳的文件
    4. 將文件寫(xiě)出到管道流
    5. 通知服務(wù)器,我已經(jīng)傳輸完畢
    6. 接受服務(wù)器的響應(yīng),確定服務(wù)器接受完畢,才能關(guān)閉連接
    7. 關(guān)閉資源
  • 服務(wù)端

    1. 建立ServerSocker端口服務(wù)
    2. 創(chuàng)建Socket監(jiān)聽(tīng),返回Socket
    3. 獲取輸入流
    4. 獲取輸入流中文件輸出
    5. 通知客戶端,我已經(jīng)接受完畢
    6. 關(guān)閉資源

2.3. Udp 傳輸

1、UdpClient.java
    
package com.hzs.basic.inet;

import java.io.IOException;
import java.net.*;

/**
 * @Author Cherist Huan
 * @Date 2021/6/10 10:41
 * @Version 1.0
 */
public class UdpClient {
    public static void main(String[] args) throws IOException {

        // System.out.println(("AB".getBytes()).length);//2

        // 1、建立一個(gè)Socket
        DatagramSocket socket = new DatagramSocket();

        // 2、建包
        String msg = "Hello Cherist Huan!";
        InetAddress byName = Inet4Address.getByName("127.0.0.1");
        int port = 9090;
        DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(),0,msg.getBytes().length,byName,port);

        // 3、發(fā)送包
        socket.send(datagramPacket);
        // 4、關(guān)閉流
       socket.close();
    }
}

2、UdpServer.java
    package com.hzs.basic.inet;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * @Author Cherist Huan
 * @Date 2021/6/10 10:57
 * @Version 1.0
 */
public class UdpServer {
    public static void main(String[] args) throws IOException {
        // 1、開(kāi)放端口
        DatagramSocket datagramSocket = new DatagramSocket(9090);

        // 2、接受數(shù)據(jù)包
        byte[] buffer = new byte[1024];
        DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);

        datagramSocket.receive(packet);// 阻塞式接受
        System.out.println(new String(packet.getData(),0,packet.getLength()));
        // 關(guān)閉流
        datagramSocket.close();
    }
}

    

2.4. Udp聊天室(多線程)

1、TalkSend.java
package com.hzs.basic.inet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.*;

/**
 * @Author Cherist Huan
 * @Date 2021/6/10 15:24
 * @Version 1.0
 */
public class TalkSend implements  Runnable {

    DatagramSocket socket = null;
    BufferedReader reader = null;

    private  int fromPort;
    private  int toPort;
    private  String toIp;

    public TalkSend(int fromPort, int toPort, String toIp) {
        this.fromPort = fromPort;
        this.toPort = toPort;
        this.toIp = toIp;

        try {
            socket = new DatagramSocket(fromPort);
            reader = new BufferedReader(new InputStreamReader(System.in));

        } catch (SocketException e) {
            e.printStackTrace();
        }

    }

    public void run() {
          while(true)
          {
              try {
                  String data = reader.readLine();
                  byte[] dataBytes = data.getBytes();

                  DatagramPacket packet = new DatagramPacket(dataBytes,0,dataBytes.length,new InetSocketAddress(this.toIp,this.toPort));

                  socket.send(packet);

                  if(data.equals("bye")){
                      break;
                  }

              } catch (IOException e) {
                  e.printStackTrace();
              }
          }

          socket.close();
    }
}

2、TalkReceive.java
package com.hzs.basic.inet;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

/**
 * @Author Cherist Huan
 * @Date 2021/6/10 15:44
 * @Version 1.0
 */
public class TalkReceive  implements  Runnable{

    DatagramSocket socket = null;
    private int port;
    private  String msg;
    public  TalkReceive(int port,String msg){
        this.port = port;
        this.msg = msg;
        try {
            socket = new DatagramSocket(port);

        } catch (SocketException e) {
            e.printStackTrace();
        }
    }

    public void run() {
       while(true){

           try {
               byte[] container = new byte[1024];
               DatagramPacket packet = new DatagramPacket(container, 0, container.length);

               socket.receive(packet);//阻塞式接受包裹

               // 斷開(kāi)連接 bye
               byte[] data = packet.getData();
               String receiveData = new String(data,0,data.length);
               System.out.println(msg+":"+receiveData);

               if(receiveData.equals("bye"))
               {
                   break;
               }

           } catch (IOException e) {
               e.printStackTrace();
           }
       }
       socket.close();
    }
}


3、TalkStudent.java
package com.hzs.basic.inet;

/**
 * @Author Cherist Huan
 * @Date 2021/6/10 15:56
 * @Version 1.0
 */
public class TalkStudent {
    public static void main(String[] args) {
        // 開(kāi)啟兩個(gè)線程
        new Thread(
                new TalkSend(7777,9999,"localhost")
        ).start();

        //學(xué)生端接受線程端口(服務(wù)端口 8888)
        new Thread(
                new TalkReceive(8888,"老師說(shuō)")
        ).start();
    }
}

4、TalkTeacher.java
package com.hzs.basic.inet;

/**
 * @Author Cherist Huan
 * @Date 2021/6/10 16:04
 * @Version 1.0
 */
public class TalkTeacher {
    public static void main(String[] args) {
        // 開(kāi)啟兩個(gè)線程
        new Thread(
                new TalkSend(6666,8888,"localhost")
        ).start();

        //老師端接受線程端口(服務(wù)端口 9999)
        new Thread(
                new TalkReceive(9999,"學(xué)生說(shuō)")
        ).start();
    }
}    

2.5 對(duì)比總結(jié)

Java網(wǎng)絡(luò)編程中,TCP(傳輸控制協(xié)議)和UDP(用戶數(shù)據(jù)報(bào)協(xié)議)是兩種主要的傳輸層協(xié)議。它們各有特點(diǎn)和適用場(chǎng)景。

TCP傳輸

特點(diǎn)

  1. 面向連接:TCP在傳輸數(shù)據(jù)之前需要先建立連接,傳輸完成后需要斷開(kāi)連接。
  2. 可靠傳輸:TCP通過(guò)序列號(hào)、確認(rèn)應(yīng)答、超時(shí)重傳等機(jī)制確保數(shù)據(jù)的可靠傳輸。
  3. 流量控制:TCP通過(guò)滑動(dòng)窗口機(jī)制進(jìn)行流量控制,避免發(fā)送方發(fā)送速率過(guò)快導(dǎo)致接收方處理不過(guò)來(lái)。
  4. 擁塞控制:TCP通過(guò)慢開(kāi)始、擁塞避免、快重傳、快恢復(fù)等算法進(jìn)行擁塞控制,避免網(wǎng)絡(luò)擁塞。

應(yīng)用場(chǎng)景文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-844947.html

  • 需要可靠傳輸?shù)膽?yīng)用,如文件傳輸、電子郵件等。
  • 對(duì)數(shù)據(jù)傳輸順序有要求的應(yīng)用,如網(wǎng)頁(yè)瀏覽、在線視頻等。

UDP傳輸

特點(diǎn)

  1. 無(wú)連接:UDP在傳輸數(shù)據(jù)之前不需要建立連接,每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息。
  2. 不可靠傳輸:UDP不保證數(shù)據(jù)的可靠傳輸,不進(jìn)行流量控制和擁塞控制。
  3. 開(kāi)銷(xiāo)小:由于UDP協(xié)議簡(jiǎn)單,傳輸開(kāi)銷(xiāo)小,適合實(shí)時(shí)性要求高的應(yīng)用。

應(yīng)用場(chǎng)景

  • 實(shí)時(shí)性要求高的應(yīng)用,如音頻、視頻流等。
  • 允許一定程度上數(shù)據(jù)丟失的應(yīng)用,如實(shí)時(shí)游戲、實(shí)時(shí)股市行情等。

到了這里,關(guān)于Java-Java基礎(chǔ)學(xué)習(xí)(2)-網(wǎng)絡(luò)編程-TCP-UDP的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)與JAVA網(wǎng)絡(luò)編程URL編程-----JAVA入門(mén)基礎(chǔ)教程-----計(jì)算機(jī)網(wǎng)絡(luò)經(jīng)典

    import org.junit.jupiter.api.Test; import java.io.*; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; public class URLTest { public static void main(String[] args) { //URL:統(tǒng)一資源定位符(種子),一個(gè)URL就定位著互聯(lián)網(wǎng)上某個(gè)資源的地址 //http:應(yīng)用層協(xié)議,IP地址,端口號(hào),資源地址,參數(shù)

    2024年02月15日
    瀏覽(99)
  • 計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)與JAVA網(wǎng)絡(luò)編程UDP編程-----JAVA入門(mén)基礎(chǔ)教程-----計(jì)算機(jī)網(wǎng)絡(luò)經(jīng)典

    import org.junit.jupiter.api.Test; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.*; public class UDP { public static void main(String[] args) { DatagramSocket datagramSocket = null; try { datagramSocket = new DatagramSocket(); InetAddress inetAddress = InetAddress.getByName(\\\"127.0.0.1\\\"); int port = 9090; byte[] byte

    2024年02月15日
    瀏覽(36)
  • Java基礎(chǔ)面試題04(網(wǎng)絡(luò)編程)

    什么是網(wǎng)絡(luò)編程?它的作用是什么? 網(wǎng)絡(luò)編程是一種用于在計(jì)算機(jī)網(wǎng)絡(luò)中進(jìn)行數(shù)據(jù)交換和通信的編程技術(shù)。它涉及到使用網(wǎng)絡(luò)協(xié)議和相關(guān)工具來(lái)實(shí)現(xiàn)程序之間的通信。網(wǎng)絡(luò)編程的目標(biāo)是允許不同設(shè)備或應(yīng)用程序之間進(jìn)行數(shù)據(jù)傳輸、共享資源和進(jìn)行遠(yuǎn)程控制。 網(wǎng)絡(luò)編程的作用

    2024年02月15日
    瀏覽(23)
  • 快速入門(mén)java網(wǎng)絡(luò)編程基礎(chǔ)------Nio

    快速入門(mén)java網(wǎng)絡(luò)編程基礎(chǔ)------Nio

    嗶哩嗶哩黑馬程序員 netty實(shí)戰(zhàn)視頻 NIO(New I/O)是Java中提供的一種基于通道和緩沖區(qū)的I/O(Input/Output)模型。它是相對(duì)于傳統(tǒng)的IO(InputStream和OutputStream)模型而言的新型I/O模型。NIO的主要特點(diǎn)包括: 1.通道與緩沖區(qū): 2.NIO引入了通道(Channel)和緩沖區(qū)(Buffer)的概念。通道

    2024年01月20日
    瀏覽(29)
  • 《Java SE》網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)歸納。

    《Java SE》網(wǎng)絡(luò)編程基礎(chǔ)知識(shí)歸納。

    目錄 一、網(wǎng)絡(luò)基本介紹 1、什么是網(wǎng)絡(luò)通信? 2、網(wǎng)絡(luò) 3、IP地址 4、域名 5、網(wǎng)絡(luò)通信協(xié)議 6、Socket 二、TCP網(wǎng)絡(luò)通信編程 ?1、應(yīng)用實(shí)例1(字節(jié)流) 2、應(yīng)用實(shí)例2(字節(jié)流) 3、應(yīng)用實(shí)例3(字符流) 4、netstat 指令 三、UDP網(wǎng)絡(luò)通信編程? 1、基本介紹 2、基本流程 3、應(yīng)用實(shí)例 ?

    2024年01月20日
    瀏覽(30)
  • 【Java學(xué)習(xí)筆記】 68 - 網(wǎng)絡(luò)——TCP編程、UDP編程

    【Java學(xué)習(xí)筆記】 68 - 網(wǎng)絡(luò)——TCP編程、UDP編程

    https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter21/src 目錄 項(xiàng)目代碼 網(wǎng)絡(luò) 一、網(wǎng)絡(luò)相關(guān)概念 1.網(wǎng)絡(luò)通訊 2.網(wǎng)絡(luò) 3.IP地址 4.域名 5.端口號(hào) 6.網(wǎng)絡(luò)通訊協(xié)議 TCP協(xié)議:傳輸控制協(xié)議 UDP協(xié)議: 二、InetAddress類(lèi) 1.相關(guān)方法 三、Socket 1.基本介紹 2.TCP網(wǎng)絡(luò)通信編程 基本介紹 應(yīng)用案例

    2024年02月04日
    瀏覽(26)
  • Java學(xué)習(xí)筆記37——網(wǎng)絡(luò)編程01

    計(jì)算機(jī)網(wǎng)絡(luò) 是指將地理位置不同的具有獨(dú)立功能的多臺(tái)計(jì)算機(jī)及其外部設(shè)備,通過(guò)通信線路連接起來(lái),在網(wǎng)絡(luò)操作系統(tǒng),網(wǎng)絡(luò)管理軟件及網(wǎng)絡(luò)通信協(xié)議的管理和協(xié)調(diào)下,實(shí)現(xiàn)資源共享和信息傳遞的計(jì)算機(jī)系統(tǒng) 網(wǎng)絡(luò)編程 在網(wǎng)絡(luò)通信協(xié)議下,實(shí)現(xiàn)網(wǎng)絡(luò)互連的不同計(jì)算機(jī)上運(yùn)行的

    2024年02月07日
    瀏覽(55)
  • Java網(wǎng)絡(luò)編程基礎(chǔ):TCP Socket套接字編程 IntAddress UDP等...

    Java網(wǎng)絡(luò)編程基礎(chǔ):TCP Socket套接字編程 IntAddress UDP等...

    目錄 一,網(wǎng)絡(luò)基礎(chǔ) 1.IP地址 2.端口 3.TCP/UDP協(xié)議 4.網(wǎng)絡(luò)編程開(kāi)發(fā)模式 ?二,基于套接字的Java網(wǎng)絡(luò)編程 1.Socket ?2.InetAddress 三.基于TCP的Socket網(wǎng)絡(luò)編程 1.單服務(wù)器端與單Socket客戶端一次通訊 2.單服務(wù)器端接收多次通訊 ?3.TCP網(wǎng)絡(luò)通訊補(bǔ)充 四,基于UDP的網(wǎng)絡(luò)編程 1. DatagramSocket:收發(fā)

    2024年04月29日
    瀏覽(28)
  • 【Java 基礎(chǔ)篇】Java網(wǎng)絡(luò)編程實(shí)戰(zhàn):P2P文件共享詳解

    【Java 基礎(chǔ)篇】Java網(wǎng)絡(luò)編程實(shí)戰(zhàn):P2P文件共享詳解

    Java網(wǎng)絡(luò)編程是現(xiàn)代軟件開(kāi)發(fā)中不可或缺的一部分,因?yàn)樗试S不同計(jì)算機(jī)之間的數(shù)據(jù)傳輸和通信。在本篇博客中,我們將深入探討Java中的P2P文件共享,包括什么是P2P文件共享、如何實(shí)現(xiàn)它以及一些相關(guān)的重要概念。 P2P(Peer-to-Peer)文件共享是一種分布式計(jì)算模型,其中每個(gè)

    2024年02月07日
    瀏覽(26)
  • Linux高性能服務(wù)器編程 學(xué)習(xí)筆記 第五章 Linux網(wǎng)絡(luò)編程基礎(chǔ)API

    Linux高性能服務(wù)器編程 學(xué)習(xí)筆記 第五章 Linux網(wǎng)絡(luò)編程基礎(chǔ)API

    我們將從以下3方面討論Linux網(wǎng)絡(luò)API: 1.socket地址API。socket最開(kāi)始的含義是一個(gè)IP地址和端口對(duì)(ip,port),它唯一表示了使用TCP通信的一端,本書(shū)稱(chēng)其為socket地址。 2.socket基礎(chǔ)API。socket的主要API都定義在sys/socket.h頭文件中,包括創(chuàng)建socket、命名socket、監(jiān)聽(tīng)socket、接受連接、發(fā)

    2024年02月07日
    瀏覽(41)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包