java——簡單的UDP程式設計
阿新 • • 發佈:2018-12-21
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上新增命令列步驟如下: