国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

黑馬程序員【網絡編程之UDP協議】

2019-11-15 00:16:44
字體:
來源:轉載
供稿:網友
黑馬程序員【網絡編程之UDP協議】

UDP協議

------- android培訓、java培訓、期待與您交流! ----------

UDP(User Datagram PRotocol)也就是用戶數據報協議,是一種無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,IETF RFC 768是UDP的正式規范。

提到無連接數據傳輸,那我們首先想到的就是不可靠,數據丟失等等,那么在我們的日常軟件中,UDP協議到底都應用在什么場景上呢?舉一個大家比較熟悉的例子,就是我們平時所用的聊天軟件,因為我們的聊天軟件所傳輸的數據并非是重要數據。

通過ip和端口號,我們可以實現一個小的聊天軟件,有興趣的朋友可以在局域網內通過該軟件聊天,安全無插件。好了廢話不多說,我們直接上代碼:

//發送端public class UdpSend {    public static void main(String[] args) throws IOException {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        DatagramSocket ds = new DatagramSocket();        System.out.println("請輸入聊天語句:");        String name = input.next();        byte[] b = name.getBytes();        DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress                .getByName("192.168.15.80"), 10000);        ds.send(dp);        ds.close();    }}
//接收端public class UdpReceive {    public static void main(String[] args) throws IOException {        // TODO Auto-generated method stub        DatagramSocket ds = new DatagramSocket(10000);        byte[] b = new byte[1024];        DatagramPacket dp = new DatagramPacket(b, b.length);        ds.receive(dp);        String data = new String(dp.getData(), 0, dp.getLength());        System.out.println(data);    }}

我用的是MyEclipse寫的代碼,有興趣的童鞋直接粘過去就能用,但是使用時大家會發現一個很明顯的缺點,就是只能發送或接受一次程序就運行結束了,這樣要怎么解決呢?我的解決方案是在外側套上一個while(true)的循環,通過條件判斷何時退出程序,聽起來很簡單,可是在加循環的時候要注意一點,就是位置問題,要特別注意的是不能將所有代碼一股腦的放到循環中,因為DatagramSocket對象如果放到循環中,那么下次循環執行時就不再是同一對象。正確修改代碼如下:

//發送端public class UdpSend {    public static void main(String[] args) throws IOException {        // TODO Auto-generated method stub        Scanner input = new Scanner(System.in);        DatagramSocket ds = new DatagramSocket();        while (true) {            System.out.println("請輸入聊天語句:");            String name = input.next();            byte[] b = name.getBytes();            DatagramPacket dp = new DatagramPacket(b, b.length, InetAddress                    .getByName("192.168.0.3"), 10000);            ds.send(dp);            if (name.equals("結束")) {                break;            }        }        ds.close();    }}
//接收端public class UdpReceive {    public static void main(String[] args) throws IOException {        // TODO Auto-generated method stub        DatagramSocket ds = new DatagramSocket(10000);        while (true) {            byte[] b = new byte[1024];            DatagramPacket dp = new DatagramPacket(b, b.length);            ds.receive(dp);            String data = new String(dp.getData(), 0, dp.getLength());            System.out.println(data);        }    }}

這樣一個可以一直在局域網內聊天的小程序就完成了。因為UDP的不可靠性,數據包在傳輸時會發生跳變,可能發生不可預知的錯誤。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙阴县| 本溪| 邯郸县| 张家口市| 志丹县| 漠河县| 易门县| 哈尔滨市| 临江市| 百色市| 江都市| 航空| 新余市| 武城县| 喀喇沁旗| 普宁市| 宽甸| 体育| 邯郸市| 临夏市| 若羌县| 张家界市| 太湖县| 马边| 临沭县| 新晃| 秦皇岛市| 应用必备| 德令哈市| 翁牛特旗| 闽侯县| 侯马市| 临澧县| 兰溪市| 中西区| 拉萨市| 镇巴县| 乳源| 边坝县| 扎鲁特旗| 招远市|