java udp廣播程式碼範例

來源:互聯網
上載者:User

應用情境: 一個學校,每當下課時間到了提供提示下課功能。

分析:用UDP實現廣播向同網段電腦發送資料,用戶端接受接受到資料後,彈出提示對話方塊。服務端需要一個迴圈來判斷時間是否到下課時間,這裡如果用死迴圈,很占系統資源,我測試CUP在100%,用java的Timer類可以很好的解決這個問題,既能保證程式始終運行,又不怎麼占系統資源,具體什麼原理,沒有仔細研究過。下面來看代碼具體實現

 

服務段代碼:

import java.io.IOException;<br />import java.net.DatagramPacket;<br />import java.net.DatagramSocket;<br />import java.net.InetAddress;<br />import java.net.SocketException;<br />import java.net.UnknownHostException;<br />import java.text.SimpleDateFormat;<br />import java.util.Date;<br />import java.util.Timer;<br />public class UdpSend {<br /> public void sendData()throws SocketException,<br />UnknownHostException{<br /> DatagramSocket ds = new DatagramSocket();// 建立用來發送資料報包的通訊端<br />String str = "1";<br />DatagramPacket dp = new DatagramPacket(str.getBytes(),<br />str.getBytes().length,<br />InetAddress.getByName("255.255.255.255"), 3001);<br />// 構造資料報包,用來將長度為 length 的包發送到指定主機上的指定連接埠號碼<br />try {<br />ds.send(dp);<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />ds.close();</p><p> }<br />public static void main(String[] args) {<br /> Timer timer = new Timer();<br /> timer.schedule(new MyTask(), 1000, 1000);<br />}<br /> static class MyTask extends java.util.TimerTask{<br /> @Override<br /> public void run() {<br /> UdpSend tt = new UdpSend();<br /> Date d = new Date();<br /> SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");<br /> String strdate = sdf.format(d);<br /> String[] classTime = {"17:18:00","17:19:00","17:20:00"};<br />for(int i = 0;i<classTime.length;i++){<br /> if(classTime[i].equals(strdate)){<br /> try {<br />tt.sendData();<br />} catch (SocketException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />} catch (UnknownHostException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />}<br /> }<br />}<br /> }<br /> }<br />}<br />

 

客戶單簡單程式碼範例,沒有做迴圈

 

package udp;<br />import java.net.DatagramPacket;<br />import java.net.DatagramSocket;<br />public class UdpRecv {<br />public static void main(String[] args) throws Exception {<br />DatagramSocket ds = new DatagramSocket(3001);// 建立接收資料通訊端並將其綁定到本地主機上的指定連接埠<br />byte[] buf = new byte[1024];<br />DatagramPacket dp = new DatagramPacket(buf, 1024);<br />ds.receive(dp);<br />String strRecv = new String(dp.getData(), 0, dp.getLength()) + " from "<br />+ dp.getAddress().getHostAddress() + ":" + dp.getPort();<br />System.out.println(strRecv);<br />ds.close();<br />}<br />}<br />

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.