java實現基於UDP協議的聊天小程序操作

UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去!

UDP適用於一次隻傳送少量數據、對可靠性要求不高的應用環境。正因為UDP協議沒有連接的過程,所以它的通信效率高;但也正因為如此,它的可靠性不如TCP協議高。QQ就使用UDP發消息,因此有時會出現收不到消息的情況。

利用UDP協議的發送和接收,模擬聊天小程序

創建聊天程序的A端:

        1、發送信息到接收端
                1 、準備發送的信息【鍵盤錄入】
                2 、指定接受端的 ip
                3 、指定接收端的端口
                4 、打包【創建 DatagramPacket 的對象】
                5 、發送【創建 DatagramSocket 的對象】
        2、接收接收回復的信息
                1 、準備接收使用字節數組
                2 、把數組封裝為數據報包【創建 DatagramPacket 的對象】
                3 、接收數據
                4 、解析報包有效數據
                3 、上述操作循環操作

創建聊天程序的B端:

        1、接收發送端的信息
                1 、準備接收使用字節數組
                2 、把數組封裝為數據報包【創建 DatagramPacket 的對象】
                3 、接收數據【創建 DatagramSocket 的對象】
                4 、解析報包有效數據
        2、回復發送端的信息
                1 、準備發送的信息【鍵盤錄入】
                2 、指定發送的 ip 【解析接收的報包的 ip 即可】
                3 、指定接收端的端口【解析接收的報包的端口即可】
                4 、打包【創建 DatagramPacket 的對象】
                5 、發送
        3、上述操作循環操作

端口一:

package com.offcn.second;
 
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;
 
public class MyQQ {
    public static void main(String[] args) throws Exception{
        DatagramSocket ds = new DatagramSocket();
        Scanner sc= new Scanner(System.in);
        while(true){
            //發送消息
            System.out.print("My:");
            //輸入發送信息
            String smsg = sc.nextLine();
            //byte[] sbs = smsg.getBytes();
            //int slen = sbs.length;
            //創建數據包
            DatagramPacket sdp = new DatagramPacket(smsg.getBytes(),//數據轉為byte數組
                    smsg.getBytes().length,//數據長度
                    InetAddress.getLocalHost(),//接收端端口號
                    9999);//接收端,端口號
            //發送
            ds.send(sdp);
            //接收消息
            //創建接收數據的數據包
            DatagramPacket rdp = new DatagramPacket(new byte[1024],1024);
            //接收數據
            ds.receive(rdp);
            //將接收的數據轉為字符串
            String rmsg = new String(rdp.getData(),0,rdp.getLength());
            //打印輸出
            System.out.println("His:"+rmsg);
 
 
 
        }
    }
}

端口二: 

package com.offcn.second;
 
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.util.Scanner;
 
public class HisQQ {
    public static void main(String[] args) throws Exception{
        DatagramSocket ds = new DatagramSocket(9999);
        Scanner sc = new Scanner(System.in);
        while(true){
            //創建接收數據的數據包
            DatagramPacket rdp = new DatagramPacket(new byte[1024],1024);
            ds.receive(rdp);
            //將接收的數據轉換為字符串
            String rmsg = new String(rdp.getData(),0,rdp.getLength());
            //輸出接收到的信息
            System.out.println("His:"+rmsg);
 
 
            //給對方回消息
            //輸入發送的數據
            System.out.print("My:");
            String smsg = sc.nextLine();
            //創建發送數據的數據包
            DatagramPacket sdp = new DatagramPacket(smsg.getBytes(),
                    smsg.getBytes().length,
                    rdp.getAddress(),
                    rdp.getPort());
            ds.send(sdp);
        }
    }
}

運行結果:

到此這篇關於java實現基於UDP協議的聊天小程序的文章就介紹到這瞭,更多相關java UDP聊天小程序內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: