1. 程式人生 > >java——簡單的UDP程式設計

java——簡單的UDP程式設計

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Random;

/**
 * @ClassName QuoteServer
 * @Description 伺服器
 * @Author lzq
 * @Date 2018/12/12 17:08
 * @Version 1.0
 **/
public class QuoteServer {
    static int index = 5;
    static String[] quotes = new String[]{"To be,or not to be:that is the question",
                          "冰凍三尺,非一日之寒",
              "生氣,就是拿別人的過錯懲罰自己,原諒自己,就是善待自己",
    "小勝憑智,大勝靠德","人無遠慮,必有近憂","生於憂患,死於安樂",
    "勇者無畏,智者無懼","事實勝於雄辯,百聞不如一見","捨得有限,贏得無限",
    "勿以惡小而為之,勿以善小而不為","有志者立長志,無志者常立志",
            "智者千慮,必有一失,愚者千慮,必有一得",
    "學而不思則罔,思而不學則殆","鞠躬盡瘁,死而後已","不鳴則已,一鳴驚人",
    "滿招損,謙受益","塞翁失馬,焉知非福","忠言逆耳利於行,良藥苦口利於病",
    "寶劍鋒從磨礪出,梅花香自苦寒來"};

    public static void main(String[] args) throws Exception{
        byte[] inbuf = new byte[256];    //建立緩衝區
        DatagramSocket socket = new DatagramSocket(1234);
        while (true) {
            //步驟一:等待並接收來自客戶機的資料包(即請求)
            DatagramPacket inpacket = new DatagramPacket(inbuf,inbuf.length);
            socket.receive(inpacket);  //接收資料包
            String string = getNextQuote();   //獲取一句名言
            byte[] outbuf = string.getBytes();  //把String轉換成位元組陣列,以便傳送
            //獲取客戶端的IP地址和埠號
            InetAddress address = inpacket.getAddress();
            int port = inpacket.getPort();
            DatagramPacket outpacket = new DatagramPacket(outbuf,outbuf.length,address,port);
            socket.send(outpacket);   //傳送資料包
        }
    }

    /**
     * 獲取一句名言
     * @return
     */
    private static String getNextQuote() {
        Random random = new Random();
        index = random.nextInt(19);
        String s = quotes[index];
        return s;
    }
}
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @ClassName QuoteClient
 * @Description 客戶端
 * @Author lzq
 * @Date 2018/12/12 17:32
 * @Version 1.0
 **/
public class QuoteClient {
    public static void main(String[] args) throws Exception{
        if(args.length != 1) {
            //如果啟動的時候沒有給出伺服器名稱或IP地址,那麼打印出錯資訊並退出
            System.out.println("錯誤!");
            return;
        }
        //步驟一:傳送一個數據包到伺服器
        DatagramSocket socket = new DatagramSocket();  //建立資料報套接字
        byte[] buf = new byte[256];   //建立緩衝區
        //命令列給出的第一個引數預設為Server的名字,通過它得到Sever的IP資訊
        InetAddress address = InetAddress.getByName(args[0]);
        DatagramPacket packet = new DatagramPacket(buf,buf.length,address,1234);
        socket.send(packet);
        //步驟二:等待並接收伺服器返回的資料包
        packet = new DatagramPacket(buf,buf.length);  //用來接收資料包
        socket.receive(packet);  //接收資料包
        String string = new String(packet.getData());  //將接收到的位元組陣列,生成相應的字串
        System.out.println(string);
        socket.close();
    }
}

執行客戶端前,先新增命令列引數:
1、idea上新增命令列步驟如下:
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

終端新增命令列引數參考