本文目錄一覽:
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文件傳輸怎麼實現?
java UDP連接,如果要發送文件的話,你只能自己定義一系列的協議
因為TCP UDP 雙方發送都是二進位數據
那麼這個實現非常複雜
得不停的發送數據,寫數據,建議使用http協議
java中如何判斷udp報文的完整性
UDP報文的完整性,不是JAVA語言本身能夠保證的,主要還是靠網路通信協議。一般來說1500個位元組應該不會出現在網路中只傳輸一部分過來的情況,因為1500個位元組還在一個UDP包的範圍內,因此會一次性發送的。但是,根據經驗,超過1K的udp報文,丟包率通常是比較高的。當然,區域網環境下這個丟包率會小很多。
另外還有一個問題,你的消息接收的緩衝區要足夠大,如果你的緩衝區只有1000個位元組的話,那麼100%你收不到一個完整的包。所以,設置合理的緩衝區也是必要的。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/254945.html