java中udp(java中udp接收數據不全)

本文目錄一覽:

java中UDP文件傳輸怎麼實現?

java UDP連接,如果要發送文件的話,你只能自己定義一系列的協議

因為TCP UDP 雙方發送都是二進位數據

那麼這個實現非常複雜

得不停的發送數據,寫數據,建議使用http協議

java 中怎麼使用UDP?

發送步驟:

使用 DatagramSocket(int port) 建立socket(套間字)服務。

將數據打包到DatagramPacket中去

通過socket服務發送 (send()方法)

關閉資源

import java.io.IOException;  

import java.net.*;  

  

public class Send {  

  

    public static void main(String[] args)  {  

          

        DatagramSocket ds = null;  //建立套間字udpsocket服務  

          

        try {  

          ds = new DatagramSocket(8999);  //實例化套間字,指定自己的port  

        } catch (SocketException e) {  

            System.out.println(“Cannot open port!”);  

            System.exit(1);   

        }  

          

        byte[] buf= “Hello, I am sender!”.getBytes();  //數據  

        InetAddress destination = null ;  

        try {  

            destination = InetAddress.getByName(“192.168.1.5”);  //需要發送的地址  

        } catch (UnknownHostException e) {  

            System.out.println(“Cannot open findhost!”);  

            System.exit(1);   

        }  

        DatagramPacket dp =   

                new DatagramPacket(buf, buf.length, destination , 10000);    

        //打包到DatagramPacket類型中(DatagramSocket的send()方法接受此類,注意10000是接受地址的埠,不同於自己的埠!)  

          

        try {  

            ds.send(dp);  //發送數據  

        } catch (IOException e) {  

        }  

        ds.close();  

    }  

}

接收步驟:

使用 DatagramSocket(int port) 建立socket(套間字)服務。(我們注意到此服務即可以接收,又可以發送),port指定監視接受埠。

定義一個數據包(DatagramPacket),儲存接收到的數據,使用其中的方法提取傳送的內容

通過DatagramSocket 的receive方法將接受到的數據存入上面定義的包中

使用DatagramPacket的方法,提取數據。

關閉資源。

import java.net.*;  

  

public class Rec {  

  

    public static void main(String[] args) throws Exception {  

          

        DatagramSocket ds = new DatagramSocket(10000);  //定義服務,監視埠上面的發送埠,注意不是send本身埠  

          

        byte[] buf = new byte[1024];//接受內容的大小,注意不要溢出  

          

        DatagramPacket dp = new DatagramPacket(buf,0,buf.length);//定義一個接收的包  

          

        ds.receive(dp);//將接受內容封裝到包中  

          

        String data = new String(dp.getData(), 0, dp.getLength());//利用getData()方法取出內容  

          

        System.out.println(data);//列印內容  

          

        ds.close();//關閉資源     

    }  

}

java中如何判斷udp報文的完整性

UDP報文的完整性,不是JAVA語言本身能夠保證的,主要還是靠網路通信協議。一般來說1500個位元組應該不會出現在網路中只傳輸一部分過來的情況,因為1500個位元組還在一個UDP包的範圍內,因此會一次性發送的。但是,根據經驗,超過1K的udp報文,丟包率通常是比較高的。當然,區域網環境下這個丟包率會小很多。

另外還有一個問題,你的消息接收的緩衝區要足夠大,如果你的緩衝區只有1000個位元組的話,那麼100%你收不到一個完整的包。所以,設置合理的緩衝區也是必要的。

原創文章,作者:QXDF8,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/130683.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
QXDF8的頭像QXDF8
上一篇 2024-10-03 23:29
下一篇 2024-10-03 23:29

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • ENet UDP 用法介紹

    ENet 是用於實現可靠的 UDP 網路通信庫。它可以在保證網路可靠性的前提下,提高網路通信的速度,是遊戲開發和實時數據傳輸領域中常用的網路庫之一。本文將圍繞 ENet UDP 進…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29

發表回復

登錄後才能評論