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

Java之UDP,TCP的詳細(xì)解析

這篇具有很好參考價(jià)值的文章主要介紹了Java之UDP,TCP的詳細(xì)解析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

練習(xí)四:文件名重復(fù)

public class UUIDTest { public static void main(String[] args) { String str = UUID.randomUUID().toString().replace("-", ""); System.out.println(str);//9f15b8c356c54f55bfcb0ee3023fce8a } } ```

public class Client {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?//客戶端:將本地文件上傳到服務(wù)器。接收服務(wù)器的反饋。
 ? ? ? ?//服務(wù)器:接收客戶端上傳的文件,上傳完畢之后給出反饋。
?
?
 ? ? ? ?//1. 創(chuàng)建Socket對(duì)象,并連接服務(wù)器
 ? ? ? ?Socket socket = new Socket("127.0.0.1",10000);
?
 ? ? ? ?//2.讀取本地文件中的數(shù)據(jù),并寫到服務(wù)器當(dāng)中
 ? ? ? ?BufferedInputStream bis = new BufferedInputStream(new FileInputStream("mysocketnet\\clientdir\\a.jpg"));
 ? ? ? ?BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
 ? ? ? ?byte[] bytes = new byte[1024];
 ? ? ? ?int len;
 ? ? ? ?while ((len = bis.read(bytes)) != -1){
 ? ? ? ? ? ?bos.write(bytes,0,len);
 ? ? ?  }
?
 ? ? ? ?//往服務(wù)器寫出結(jié)束標(biāo)記
 ? ? ? ?socket.shutdownOutput();
?
?
 ? ? ? ?//3.接收服務(wù)器的回寫數(shù)據(jù)
 ? ? ? ?BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 ? ? ? ?String line = br.readLine();
 ? ? ? ?System.out.println(line);
?
?
 ? ? ? ?//4.釋放資源
 ? ? ? ?socket.close();
?
 ?  }
}
public class Server {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?//客戶端:將本地文件上傳到服務(wù)器。接收服務(wù)器的反饋。
 ? ? ? ?//服務(wù)器:接收客戶端上傳的文件,上傳完畢之后給出反饋。
?
?
 ? ? ? ?//1.創(chuàng)建對(duì)象并綁定端口
 ? ? ? ?ServerSocket ss = new ServerSocket(10000);
?
 ? ? ? ?//2.等待客戶端來連接
 ? ? ? ?Socket socket = ss.accept();
?
 ? ? ? ?//3.讀取數(shù)據(jù)并保存到本地文件中
 ? ? ? ?BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
 ? ? ? ?String name = UUID.randomUUID().toString().replace("-", "");
 ? ? ? ?BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("mysocketnet\\serverdir\\" + name + ".jpg"));
 ? ? ? ?int len;
 ? ? ? ?byte[] bytes = new byte[1024];
 ? ? ? ?while ((len = bis.read(bytes)) != -1) {
 ? ? ? ? ? ?bos.write(bytes, 0, len);
 ? ? ?  }
 ? ? ? ?bos.close();
 ? ? ? ?//4.回寫數(shù)據(jù)
 ? ? ? ?BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
 ? ? ? ?bw.write("上傳成功");
 ? ? ? ?bw.newLine();
 ? ? ? ?bw.flush();
?
 ? ? ? ?//5.釋放資源
 ? ? ? ?socket.close();
 ? ? ? ?ss.close();
 ?  }
}

練習(xí)五:服務(wù)器改寫為多線程

服務(wù)器只能處理一個(gè)客戶端請(qǐng)求,接收完一個(gè)圖片之后,服務(wù)器就關(guān)閉了。

優(yōu)化方案一:

使用循環(huán)

弊端:

第一個(gè)用戶正在上傳數(shù)據(jù),第二個(gè)用戶就來訪問了,此時(shí)第二個(gè)用戶是無法成功上傳的。

所以,使用多線程改進(jìn)

優(yōu)化方案二:

每來一個(gè)用戶,就開啟多線程處理文章來源地址http://www.zghlxwxcb.cn/news/detail-725124.html

public class Client {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?//客戶端:將本地文件上傳到服務(wù)器。接收服務(wù)器的反饋。
 ? ? ? ?//服務(wù)器:接收客戶端上傳的文件,上傳完畢之后給出反饋。
?
?
 ? ? ? ?//1. 創(chuàng)建Socket對(duì)象,并連接服務(wù)器
 ? ? ? ?Socket socket = new Socket("127.0.0.1",10000);
?
 ? ? ? ?//2.讀取本地文件中的數(shù)據(jù),并寫到服務(wù)器當(dāng)中
 ? ? ? ?BufferedInputStream bis = new BufferedInputStream(new FileInputStream("mysocketnet\\clientdir\\a.jpg"));
 ? ? ? ?BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
 ? ? ? ?byte[] bytes = new byte[1024];
 ? ? ? ?int len;
 ? ? ? ?while ((len = bis.read(bytes)) != -1){
 ? ? ? ? ? ?bos.write(bytes,0,len);
 ? ? ?  }
?
 ? ? ? ?//往服務(wù)器寫出結(jié)束標(biāo)記
 ? ? ? ?socket.shutdownOutput();
?
?
 ? ? ? ?//3.接收服務(wù)器的回寫數(shù)據(jù)
 ? ? ? ?BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 ? ? ? ?String line = br.readLine();
 ? ? ? ?System.out.println(line);
?
?
 ? ? ? ?//4.釋放資源
 ? ? ? ?socket.close();
?
 ?  }
}
public class Server {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?//客戶端:將本地文件上傳到服務(wù)器。接收服務(wù)器的反饋。
 ? ? ? ?//服務(wù)器:接收客戶端上傳的文件,上傳完畢之后給出反饋。
?
?
 ? ? ? ?//1.創(chuàng)建對(duì)象并綁定端口
 ? ? ? ?ServerSocket ss = new ServerSocket(10000);
?
 ? ? ? ?while (true) {
 ? ? ? ? ? ?//2.等待客戶端來連接
 ? ? ? ? ? ?Socket socket = ss.accept();
?
 ? ? ? ? ? ?//開啟一條線程
 ? ? ? ? ? ?//一個(gè)用戶就對(duì)應(yīng)服務(wù)端的一條線程
 ? ? ? ? ? ?new Thread(new MyRunnable(socket)).start();
 ? ? ?  }
?
 ?  }
}
?
?
public class MyRunnable implements Runnable{
?
 ? ?Socket socket;
?
 ? ?public MyRunnable(Socket socket){
 ? ? ? ?this.socket = socket;
 ?  }
?
 ? ?@Override
 ? ?public void run() {
 ? ? ? ?try {
 ? ? ? ? ? ?//3.讀取數(shù)據(jù)并保存到本地文件中
 ? ? ? ? ? ?BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
 ? ? ? ? ? ?String name = UUID.randomUUID().toString().replace("-", "");
 ? ? ? ? ? ?BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("mysocketnet\\serverdir\\" + name + ".jpg"));
 ? ? ? ? ? ?int len;
 ? ? ? ? ? ?byte[] bytes = new byte[1024];
 ? ? ? ? ? ?while ((len = bis.read(bytes)) != -1) {
 ? ? ? ? ? ? ? ?bos.write(bytes, 0, len);
 ? ? ? ? ?  }
 ? ? ? ? ? ?bos.close();
 ? ? ? ? ? ?//4.回寫數(shù)據(jù)
 ? ? ? ? ? ?BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
 ? ? ? ? ? ?bw.write("上傳成功");
 ? ? ? ? ? ?bw.newLine();
 ? ? ? ? ? ?bw.flush();
 ? ? ?  } catch (IOException e) {
 ? ? ? ? ? ?e.printStackTrace();
 ? ? ?  } finally {
 ? ? ? ? ? ?//5.釋放資源
 ? ? ? ? ? if(socket != null){
 ? ? ? ? ? ? ? try {
 ? ? ? ? ? ? ? ? ? socket.close();
 ? ? ? ? ? ? ? } catch (IOException e) {
 ? ? ? ? ? ? ? ? ? e.printStackTrace();
 ? ? ? ? ? ? ? }
 ? ? ? ? ? }
 ? ? ?  }
 ?  }
}

練習(xí)六:線程池改進(jìn)

public class Client {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?//客戶端:將本地文件上傳到服務(wù)器。接收服務(wù)器的反饋。
 ? ? ? ?//服務(wù)器:接收客戶端上傳的文件,上傳完畢之后給出反饋。
?
?
 ? ? ? ?//1. 創(chuàng)建Socket對(duì)象,并連接服務(wù)器
 ? ? ? ?Socket socket = new Socket("127.0.0.1",10000);
?
 ? ? ? ?//2.讀取本地文件中的數(shù)據(jù),并寫到服務(wù)器當(dāng)中
 ? ? ? ?BufferedInputStream bis = new BufferedInputStream(new FileInputStream("mysocketnet\\clientdir\\a.jpg"));
 ? ? ? ?BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
 ? ? ? ?byte[] bytes = new byte[1024];
 ? ? ? ?int len;
 ? ? ? ?while ((len = bis.read(bytes)) != -1){
 ? ? ? ? ? ?bos.write(bytes,0,len);
 ? ? ?  }
?
 ? ? ? ?//往服務(wù)器寫出結(jié)束標(biāo)記
 ? ? ? ?socket.shutdownOutput();
?
?
 ? ? ? ?//3.接收服務(wù)器的回寫數(shù)據(jù)
 ? ? ? ?BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 ? ? ? ?String line = br.readLine();
 ? ? ? ?System.out.println(line);
?
?
 ? ? ? ?//4.釋放資源
 ? ? ? ?socket.close();
?
 ?  }
}
public class Server {
 ? ?public static void main(String[] args) throws IOException {
 ? ? ? ?//客戶端:將本地文件上傳到服務(wù)器。接收服務(wù)器的反饋。
 ? ? ? ?//服務(wù)器:接收客戶端上傳的文件,上傳完畢之后給出反饋。
?
?
 ? ? ? ?//創(chuàng)建線程池對(duì)象
 ? ? ? ?ThreadPoolExecutor pool = new ThreadPoolExecutor(
 ? ? ? ? ? ? ? ?3,//核心線程數(shù)量
 ? ? ? ? ? ? ? ?16,//線程池總大小
 ? ? ? ? ? ? ? ?60,//空閑時(shí)間
 ? ? ? ? ? ? ? ?TimeUnit.SECONDS,//空閑時(shí)間(單位)
 ? ? ? ? ? ? ? ?new ArrayBlockingQueue<>(2),//隊(duì)列
 ? ? ? ? ? ? ? ?Executors.defaultThreadFactory(),//線程工廠,讓線程池如何創(chuàng)建線程對(duì)象
 ? ? ? ? ? ? ? ?new ThreadPoolExecutor.AbortPolicy()//阻塞隊(duì)列
 ? ? ?  );
?
?
?
 ? ? ? ?//1.創(chuàng)建對(duì)象并綁定端口
 ? ? ? ?ServerSocket ss = new ServerSocket(10000);
?
 ? ? ? ?while (true) {
 ? ? ? ? ? ?//2.等待客戶端來連接
 ? ? ? ? ? ?Socket socket = ss.accept();
?
 ? ? ? ? ? ?//開啟一條線程
 ? ? ? ? ? ?//一個(gè)用戶就對(duì)應(yīng)服務(wù)端的一條線程
 ? ? ? ? ? ?//new Thread(new MyRunnable(socket)).start();
 ? ? ? ? ? ?pool.submit(new MyRunnable(socket));
 ? ? ?  }
?
 ?  }
}
public class MyRunnable implements Runnable{
?
 ? ?Socket socket;
?
 ? ?public MyRunnable(Socket socket){
 ? ? ? ?this.socket = socket;
 ?  }
?
 ? ?@Override
 ? ?public void run() {
 ? ? ? ?try {
 ? ? ? ? ? ?//3.讀取數(shù)據(jù)并保存到本地文件中
 ? ? ? ? ? ?BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
 ? ? ? ? ? ?String name = UUID.randomUUID().toString().replace("-", "");
 ? ? ? ? ? ?BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("mysocketnet\\serverdir\\" + name + ".jpg"));
 ? ? ? ? ? ?int len;
 ? ? ? ? ? ?byte[] bytes = new byte[1024];
 ? ? ? ? ? ?while ((len = bis.read(bytes)) != -1) {
 ? ? ? ? ? ? ? ?bos.write(bytes, 0, len);
 ? ? ? ? ?  }
 ? ? ? ? ? ?bos.close();
 ? ? ? ? ? ?//4.回寫數(shù)據(jù)
 ? ? ? ? ? ?BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
 ? ? ? ? ? ?bw.write("上傳成功");
 ? ? ? ? ? ?bw.newLine();
 ? ? ? ? ? ?bw.flush();
 ? ? ?  } catch (IOException e) {
 ? ? ? ? ? ?e.printStackTrace();
 ? ? ?  } finally {
 ? ? ? ? ? ?//5.釋放資源
 ? ? ? ? ? if(socket != null){
 ? ? ? ? ? ? ? try {
 ? ? ? ? ? ? ? ? ? socket.close();
 ? ? ? ? ? ? ? } catch (IOException e) {
 ? ? ? ? ? ? ? ? ? e.printStackTrace();
 ? ? ? ? ? ? ? }
 ? ? ? ? ? }
 ? ? ?  }
 ?  }
}

到了這里,關(guān)于Java之UDP,TCP的詳細(xì)解析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(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)文章

  • Java網(wǎng)絡(luò)編程 *TCP與UDP協(xié)議*

    Java網(wǎng)絡(luò)編程 *TCP與UDP協(xié)議*

    把分布在 不同地理區(qū)域 的具有獨(dú)立功能的計(jì)算機(jī), 通過通信設(shè)備與線路 連接起來,由功能完善的軟件實(shí)現(xiàn)資源共享和信息傳遞的 系統(tǒng) 簡(jiǎn)單來說就是把不同地區(qū)的計(jì)算機(jī)通過設(shè)備連接起來,實(shí)現(xiàn)不同地區(qū)之前的數(shù)據(jù)傳輸 網(wǎng)絡(luò)編程 是借助計(jì)算機(jī)網(wǎng)絡(luò),實(shí)現(xiàn)我們所寫的程序,在不同

    2024年01月16日
    瀏覽(31)
  • 【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類 1.相關(guān)方法 三、Socket 1.基本介紹 2.TCP網(wǎng)絡(luò)通信編程 基本介紹 應(yīng)用案例

    2024年02月04日
    瀏覽(26)
  • 【Java 網(wǎng)絡(luò)編程】網(wǎng)絡(luò)通信原理、TCP、UDP 回顯服務(wù)

    【Java 網(wǎng)絡(luò)編程】網(wǎng)絡(luò)通信原理、TCP、UDP 回顯服務(wù)

    互聯(lián)網(wǎng)從何而來? 這要追溯到上個(gè)世紀(jì) 50 - 60 年代,當(dāng)時(shí)正逢美蘇爭(zhēng)霸冷戰(zhàn), 核武器 給戰(zhàn)爭(zhēng)雙方提供了足夠的威懾力,想要保全自己,就要保證自己的 反制手段 是有效的。 如何保證能夠反擊: 保存指揮機(jī)構(gòu) 保存核彈頭和發(fā)射井 指揮機(jī)構(gòu)和核彈頭之間的通信鏈路 需要保證

    2023年04月10日
    瀏覽(33)
  • Java網(wǎng)絡(luò)編程(二)Socket 套接字(TCP和UDP),以及TCP的回顯

    Java網(wǎng)絡(luò)編程(二)Socket 套接字(TCP和UDP),以及TCP的回顯

    我們軟件工作者,著重編寫的是應(yīng)用層的代碼,但是發(fā)送這個(gè)數(shù)據(jù),我們就需要將應(yīng)用層傳輸?shù)絺鬏攲樱簿鸵馕吨覀冃枰{(diào)用應(yīng)用層的API,統(tǒng)稱為 Socket API。 套接字的分類: 流套接字:使用傳輸層TCP協(xié)議 特點(diǎn): 有連接:使用 TCP 通信的雙方,需要時(shí)刻保存對(duì)方的相關(guān)消

    2024年02月09日
    瀏覽(21)
  • Java-Java基礎(chǔ)學(xué)習(xí)(2)-網(wǎng)絡(luò)編程-TCP-UDP

    2.1. 通信協(xié)議 TCP、UDP對(duì)比 TCP 打電話 連接,穩(wěn)定 三次握手,四次揮手 客戶端、服務(wù)端 傳輸完成,釋放連接,效率低 UDP 發(fā)短信 不連接,不穩(wěn)定 客戶端,服務(wù)端,沒有明確的界限 不管有沒有準(zhǔn)備好,都可以發(fā)給你 導(dǎo)彈 DDOS:洪水供給?。柡凸簦?2.2. Tcp上傳測(cè)試 總結(jié):

    2024年04月09日
    瀏覽(33)
  • 網(wǎng)絡(luò)編程——TCP/IP協(xié)議族(IP協(xié)議、TCP協(xié)議和UDP協(xié)議……)

    1、IP協(xié)議簡(jiǎn)介 IP協(xié)議又稱 網(wǎng)際協(xié)議 特指為實(shí)現(xiàn)在一個(gè)相互連接的網(wǎng)絡(luò)系統(tǒng)上從源地址到目的地傳輸數(shù)據(jù)包(互聯(lián)網(wǎng)數(shù)據(jù)包)所提供必要功能的協(xié)議,是網(wǎng)絡(luò)層中的協(xié)議。 2、特點(diǎn) 不可靠 :它不能保證IP數(shù)據(jù)包能成功地到達(dá)它的目的地,僅提供盡力而為的傳輸服務(wù) 無連接 :IP 并不

    2024年02月13日
    瀏覽(113)
  • 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ò)編程開發(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)
  • IP報(bào)文解析(TCP、UDP、 ICMP)及代碼分享(C++)

    IP報(bào)文解析(TCP、UDP、 ICMP)及代碼分享(C++)

    1.1 OSI 7層模型: 應(yīng)用層: 功能:用戶接口,文件傳輸、電子郵件、虛擬終端、文件服務(wù) 設(shè)備:網(wǎng)關(guān) 協(xié)議:HTTP、TFTP、SMTP、FTP、SNMP、DNS、Telnet 表示層: 功能:數(shù)據(jù)的表示,壓縮和加密 設(shè)備:網(wǎng)關(guān) 協(xié)議:無 會(huì)話層: 功能:會(huì)話的建立和結(jié)束 設(shè)備:網(wǎng)關(guān) 協(xié)議:無 傳輸層:

    2024年02月09日
    瀏覽(23)
  • HTTP/UDP/TCP/IP網(wǎng)絡(luò)協(xié)議

    HTTP/UDP/TCP/IP網(wǎng)絡(luò)協(xié)議

    OSI模型定義了網(wǎng)絡(luò)互連的七層框架(物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、傳輸層、會(huì)話層、表示層、應(yīng)用層),每一層實(shí)現(xiàn)各自的功能和協(xié)議,并完成與相鄰層的接口通信。OSI模型各層的通信協(xié)議,大致舉例如下表所示: 層次 常見協(xié)議 應(yīng)用層 HTTP、SMTP、SNMP、FTP、Telnet、SIP、SS

    2024年04月11日
    瀏覽(28)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)之TCP/UDP篇】TCP與UDP協(xié)議詳細(xì)介紹

    【計(jì)算機(jī)網(wǎng)絡(luò)之TCP/UDP篇】TCP與UDP協(xié)議詳細(xì)介紹

    目錄 一、TCP協(xié)議 1.1 TCP協(xié)議段 1.2? TCP的原理 1.2.1? ?確認(rèn)應(yīng)答機(jī)制(安全機(jī)制) 1.2.2?超時(shí)重傳機(jī)制(安全機(jī)制) 1.2.3? TCP是如何實(shí)現(xiàn)可靠性傳輸? 1.2.4? ?連接管理機(jī)制(安全機(jī)制) 1.2.5? 滑動(dòng)窗口機(jī)制(效率機(jī)制) 1.2.6 流量控制機(jī)制 1.2.7?擁塞控制(安全機(jī)制) 1.2.8??延

    2024年02月07日
    瀏覽(35)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包