欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java實(shí)現(xiàn)UDP通信過程實(shí)例分析【服務(wù)器端與客戶端】

 更新時(shí)間:2020年05月07日 11:09:41   作者:Juily家的小蜜果  
這篇文章主要介紹了Java實(shí)現(xiàn)UDP通信過程,結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)UDP服務(wù)器端與客戶端相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Java實(shí)現(xiàn)UDP通信過程。分享給大家供大家參考,具體如下:

TCP是一種面向連接的傳輸層協(xié)議,而UDP是傳輸層中面向無(wú)連接的協(xié)議,故傳送的數(shù)據(jù)包不能保證有序和不丟失,實(shí)現(xiàn)UDP通信主要用到了兩個(gè)類:DatagramPacket和DatagramSocket。

DatagramSocket

這個(gè)類用來(lái)表示發(fā)送和接收數(shù)據(jù)包的套接字。

//構(gòu)造方法,創(chuàng)建數(shù)據(jù)報(bào)套接字并將其綁定到本地主機(jī)上的指定端口
DatagramSocket socket = new DatagramSocket(0);

DatagramPacket

表示數(shù)據(jù)報(bào)包,用來(lái)實(shí)現(xiàn)無(wú)連接的包的投遞服務(wù)。這些數(shù)據(jù)包選擇不同的路由,經(jīng)過計(jì)算機(jī)的存儲(chǔ)轉(zhuǎn)發(fā),最終到達(dá)目的計(jì)算機(jī)。所以到達(dá)的數(shù)據(jù)包和發(fā)送時(shí)的順序不一定會(huì)相同。

Sever端程序

一,調(diào)用DatagramSocket(int port)創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字,綁定在指定端口上;
二,調(diào)用DatagramPacket(byte[] buf,int length),建立一個(gè)字節(jié)數(shù)組來(lái)接收UDP包;
三,調(diào)用DatagramSocket.receive();
四,最后關(guān)閉數(shù)據(jù)報(bào)套接字。

Client端程序

一,調(diào)用DatagramSocket()創(chuàng)建一個(gè)數(shù)據(jù)報(bào)套接字;
二,調(diào)用DatagramPacket(byte[] buf,int offset,InetAddress address,int port),建立要發(fā)送的UDP包
三,調(diào)用DatagramSocket類的send方法發(fā)送數(shù)據(jù)包;
四,關(guān)閉數(shù)據(jù)報(bào)套接字。

數(shù)據(jù)報(bào)套接字發(fā)送成功后,相當(dāng)于建立了一個(gè)虛連接,雙方可以發(fā)送數(shù)據(jù)。

實(shí)例

服務(wù)器端:

/*
 * 服務(wù)器端,實(shí)現(xiàn)基于UDP的用戶登陸
 */
public class UDPServer {
  public static void main(String[] args) throws IOException {
    /*
     * 接收客戶端發(fā)送的數(shù)據(jù)
     */
    // 1.創(chuàng)建服務(wù)器端DatagramSocket,指定端口
    DatagramSocket socket = new DatagramSocket(8800);
    // 2.創(chuàng)建數(shù)據(jù)報(bào),用于接收客戶端發(fā)送的數(shù)據(jù)
    byte[] data = new byte[1024];// 創(chuàng)建字節(jié)數(shù)組,指定接收的數(shù)據(jù)包的大小
    DatagramPacket packet = new DatagramPacket(data, data.length);
    // 3.接收客戶端發(fā)送的數(shù)據(jù)
    System.out.println("****服務(wù)器端已經(jīng)啟動(dòng),等待客戶端發(fā)送數(shù)據(jù)");
    socket.receive(packet);// 此方法在接收到數(shù)據(jù)報(bào)之前會(huì)一直阻塞
    // 4.讀取數(shù)據(jù)
    String info = new String(data, 0, packet.getLength());
    System.out.println("我是服務(wù)器,客戶端說:" + info);
 
    /*
     * 向客戶端響應(yīng)數(shù)據(jù)
     */
    // 1.定義客戶端的地址、端口號(hào)、數(shù)據(jù)
    InetAddress address = packet.getAddress();
    int port = packet.getPort();
    byte[] data2 = "歡迎您!".getBytes();
    // 2.創(chuàng)建數(shù)據(jù)報(bào),包含響應(yīng)的數(shù)據(jù)信息
    DatagramPacket packet2 = new DatagramPacket(data2, data2.length, address, port);
    // 3.響應(yīng)客戶端
    socket.send(packet2);
    // 4.關(guān)閉資源
    socket.close();
  }
}

客戶端:

/*
 * 客戶端
 */
public class UDPClient {
  public static void main(String[] args) throws IOException {
    /*
     * 向服務(wù)器端發(fā)送數(shù)據(jù)
     */
    // 1.定義服務(wù)器的地址、端口號(hào)、數(shù)據(jù)
    InetAddress address = InetAddress.getByName("localhost");
    int port = 8800;
    byte[] data = "用戶名:admin;密碼:123".getBytes();
    // 2.創(chuàng)建數(shù)據(jù)報(bào),包含發(fā)送的數(shù)據(jù)信息
    DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
    // 3.創(chuàng)建DatagramSocket對(duì)象
    DatagramSocket socket = new DatagramSocket();
    // 4.向服務(wù)器端發(fā)送數(shù)據(jù)報(bào)
    socket.send(packet);
 
    /*
     * 接收服務(wù)器端響應(yīng)的數(shù)據(jù)
     */
    // 1.創(chuàng)建數(shù)據(jù)報(bào),用于接收服務(wù)器端響應(yīng)的數(shù)據(jù)
    byte[] data2 = new byte[1024];
    DatagramPacket packet2 = new DatagramPacket(data2, data2.length);
    // 2.接收服務(wù)器響應(yīng)的數(shù)據(jù)
    socket.receive(packet2);
    // 3.讀取數(shù)據(jù)
    String reply = new String(data2, 0, packet2.getLength());
    System.out.println("我是客戶端,服務(wù)器說:" + reply);
    // 4.關(guān)閉資源
    socket.close();
  }
}

更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • java實(shí)現(xiàn)微信紅包 拼手氣紅包

    java實(shí)現(xiàn)微信紅包 拼手氣紅包

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)微信紅包,拼手氣紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • java分析html算法(java網(wǎng)頁(yè)蜘蛛算法示例)

    java分析html算法(java網(wǎng)頁(yè)蜘蛛算法示例)

    近來(lái)有些朋友在做蜘蛛算法,或者在網(wǎng)頁(yè)上面做深度的數(shù)據(jù)挖掘,下面使用示例
    2014-03-03
  • 詳解Spring AOP的實(shí)現(xiàn)方式

    詳解Spring AOP的實(shí)現(xiàn)方式

    AOP是一種思想,是對(duì)某一類事情的集中處理,切面就是指某一類特定的問題,所以AOP可以理解為面向特定方法編程,這篇文章主要介紹了Spring AOP的實(shí)現(xiàn)方式,需要的朋友可以參考下
    2024-02-02
  • Java+Nginx實(shí)現(xiàn)POP、IMAP、SMTP郵箱代理服務(wù)

    Java+Nginx實(shí)現(xiàn)POP、IMAP、SMTP郵箱代理服務(wù)

    本篇文章的內(nèi)容是介紹Java+Nginx如何實(shí)現(xiàn)POP、IMAP、SMTP郵箱代理服務(wù),步驟詳細(xì),思路清新,需要的朋友可以參考下
    2015-07-07
  • 你知道jdk竟有4個(gè)random嗎

    你知道jdk竟有4個(gè)random嗎

    這篇文章主要給大家介紹了關(guān)于jdk中4個(gè)random的相關(guān)資料,分別是Random、ThreadLocalRandom、SecureRandom以及SplittableRandom,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-06-06
  • SpringBoot使用Spring Test進(jìn)行集成測(cè)試的流程步驟

    SpringBoot使用Spring Test進(jìn)行集成測(cè)試的流程步驟

    Spring Test 是 Spring Framework 提供的一個(gè)測(cè)試框架,它可以幫助我們進(jìn)行集成測(cè)試,在本文中,我們將介紹如何使用 Spring Test 進(jìn)行集成測(cè)試,需要的朋友可以參考下
    2023-06-06
  • 詳解Maven optional關(guān)鍵字透徹圖解

    詳解Maven optional關(guān)鍵字透徹圖解

    這篇文章主要介紹了詳解Maven optional關(guān)鍵字透徹圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java面試題沖刺第三天--集合框架篇

    Java面試題沖刺第三天--集合框架篇

    這篇文章主要為大家分享了最有價(jià)值的三道java面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java簡(jiǎn)單計(jì)算器的實(shí)現(xiàn)

    Java簡(jiǎn)單計(jì)算器的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Java簡(jiǎn)單計(jì)算器的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 玩轉(zhuǎn)spring boot 結(jié)合jQuery和AngularJs(3)

    玩轉(zhuǎn)spring boot 結(jié)合jQuery和AngularJs(3)

    玩轉(zhuǎn)spring boot,這篇文章主要介紹了結(jié)合jQuery和AngularJs,玩轉(zhuǎn)spring boot,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-01-01

最新評(píng)論