Java如何實現(xiàn)UDP通信

小編這次要給大家分享的是Java如何實現(xiàn)UDP通信,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

為企業(yè)提供做網(wǎng)站、網(wǎng)站建設(shè)、網(wǎng)站優(yōu)化、全網(wǎng)整合營銷推廣、競價托管、品牌運營等營銷獲客服務(wù)。創(chuàng)新互聯(lián)建站擁有網(wǎng)絡(luò)營銷運營團(tuán)隊,以豐富的互聯(lián)網(wǎng)營銷經(jīng)驗助力企業(yè)精準(zhǔn)獲客,真正落地解決中小企業(yè)營銷獲客難題,做到“讓獲客更簡單”。自創(chuàng)立至今,成功用技術(shù)實力解決了企業(yè)“網(wǎng)站建設(shè)、網(wǎng)絡(luò)品牌塑造、網(wǎng)絡(luò)營銷”三大難題,同時降低了營銷成本,提高了有效客戶轉(zhuǎn)化率,獲得了眾多企業(yè)客戶的高度認(rèn)可!

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

DatagramSocket

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

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

DatagramPacket

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

Java如何實現(xiàn)UDP通信

Sever端程序

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

Client端程序

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

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

實例

服務(wù)器端:

/*
 * 服務(wù)器端,實現(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ù)報,用于接收客戶端發(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)啟動,等待客戶端發(fā)送數(shù)據(jù)");
    socket.receive(packet);// 此方法在接收到數(shù)據(jù)報之前會一直阻塞
    // 4.讀取數(shù)據(jù)
    String info = new String(data, 0, packet.getLength());
    System.out.println("我是服務(wù)器,客戶端說:" + info);
 
    /*
     * 向客戶端響應(yīng)數(shù)據(jù)
     */
    // 1.定義客戶端的地址、端口號、數(shù)據(jù)
    InetAddress address = packet.getAddress();
    int port = packet.getPort();
    byte[] data2 = "歡迎您!".getBytes();
    // 2.創(chuàng)建數(shù)據(jù)報,包含響應(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ù)器的地址、端口號、數(shù)據(jù)
    InetAddress address = InetAddress.getByName("localhost");
    int port = 8800;
    byte[] data = "用戶名:admin;密碼:123".getBytes();
    // 2.創(chuàng)建數(shù)據(jù)報,包含發(fā)送的數(shù)據(jù)信息
    DatagramPacket packet = new DatagramPacket(data, data.length, address, port);
    // 3.創(chuàng)建DatagramSocket對象
    DatagramSocket socket = new DatagramSocket();
    // 4.向服務(wù)器端發(fā)送數(shù)據(jù)報
    socket.send(packet);
 
    /*
     * 接收服務(wù)器端響應(yīng)的數(shù)據(jù)
     */
    // 1.創(chuàng)建數(shù)據(jù)報,用于接收服務(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如何實現(xiàn)UDP通信的文章,如果覺得文章內(nèi)容寫得不錯的話,可以把它分享出去給更多人看到。

標(biāo)題名稱:Java如何實現(xiàn)UDP通信
標(biāo)題鏈接:http://bm7419.com/article10/ipoodo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站標(biāo)簽優(yōu)化、全網(wǎng)營銷推廣、響應(yīng)式網(wǎng)站、云服務(wù)器、網(wǎng)站設(shè)計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站建設(shè)