UDP
UDP
UDP發(fā)送數(shù)據(jù)
- Java中的UDP通信
- UDP協(xié)議是一種不可靠的網(wǎng)絡(luò)協(xié)議,它在通信的兩端各建立一個(gè)Socket對象,但是這兩個(gè)Socket只是發(fā)送,接收數(shù)據(jù)的對象,因此對于基于UDP協(xié)議的通信雙方而言,沒有所謂的客戶端和服務(wù)器的概念
- Java提供了DatagramSocket類作為基于UDP協(xié)議的Socket
構(gòu)造方法
| DatagramSocket() | 創(chuàng)建數(shù)據(jù)報(bào)套接字并將其綁定到本機(jī)地址上的任何可用端口 |
| DatagramPacket(byte[] buf,int len,InetAddress add,int port) | 創(chuàng)建數(shù)據(jù)包,發(fā)送長度為len的數(shù)據(jù)包到指定主機(jī)的指定端口 |
代碼演示
DatagramSocket datagramSocket = new DatagramSocket();String s = "UDP客戶端";byte[] bytes = s.getBytes();InetAddress name = InetAddress.getByName("1270.0.1");int dk = 8888;DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,name,dk);| void send(DatagramPacket p) | 發(fā)送數(shù)據(jù)報(bào)包 |
| void close() | 關(guān)閉數(shù)據(jù)報(bào)套接字 |
| void receive(DatagramPacket p) | 從此套接字接受數(shù)據(jù)報(bào)包 |
代碼演示
DatagramSocket datagramSocket = new DatagramSocket();String s = "UDP客戶端";byte[] bytes = s.getBytes();InetAddress name = InetAddress.getByName("1270.0.1");int dk = 8888;DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length,name,dk);datagramSocket.send(datagramPacket);datagramSocket.close();void receive(DatagramPacket p) 從此套接字接受數(shù)據(jù)報(bào)包
DatagramSocket datagramSocket = new DatagramSocket(8888);byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);datagramSocket.receive(datagramPacket);byte[] data = datagramPacket.getData();int length = datagramPacket.getLength();datagramSocket.close();UDP接收數(shù)據(jù)【應(yīng)用】
-
接收數(shù)據(jù)的步驟
- 創(chuàng)建接收端的Socket對象(DatagramSocket)
- 創(chuàng)建一個(gè)數(shù)據(jù)包,用于接收數(shù)據(jù)
- 調(diào)用DatagramSocket對象的方法接收數(shù)據(jù)
- 解析數(shù)據(jù)包,并把數(shù)據(jù)在控制臺顯示
- 關(guān)閉接收端
-
構(gòu)造方法
方法名說明 DatagramPacket(byte[] buf, int len) 創(chuàng)建一個(gè)DatagramPacket用于接收長度為len的數(shù)據(jù)包 -
相關(guān)方法
方法名說明 byte[] getData() 返回?cái)?shù)據(jù)緩沖區(qū) int getLength() 返回要發(fā)送的數(shù)據(jù)的長度或接收的數(shù)據(jù)的長度
代碼演示
DatagramSocket datagramSocket = new DatagramSocket(8888);byte[] bytes = new byte[1024];DatagramPacket datagramPacket = new DatagramPacket(bytes,bytes.length);datagramSocket.receive(datagramPacket);byte[] data = datagramPacket.getData();int length = datagramPacket.getLength();datagramSocket.close();UDP三種通訊方式【理解】
-
單播
單播用于兩個(gè)主機(jī)之間的端對端通信
-
組播
組播用于對一組特定的主機(jī)進(jìn)行通信
-
廣播
廣播用于一個(gè)主機(jī)對整個(gè)局域網(wǎng)上所有主機(jī)上的數(shù)據(jù)通信
UDP組播實(shí)現(xiàn)【理解】
-
實(shí)現(xiàn)步驟
- 發(fā)送端
- 創(chuàng)建發(fā)送端的Socket對象(DatagramSocket)
- 創(chuàng)建數(shù)據(jù),并把數(shù)據(jù)打包(DatagramPacket)
- 調(diào)用DatagramSocket對象的方法發(fā)送數(shù)據(jù)(在單播中,這里是發(fā)給指定IP的電腦但是在組播當(dāng)中,這里是發(fā)給組播地址)
- 釋放資源
- 接收端
- 創(chuàng)建接收端Socket對象(MulticastSocket)
- 創(chuàng)建一個(gè)箱子,用于接收數(shù)據(jù)
- 把當(dāng)前計(jì)算機(jī)綁定一個(gè)組播地址
- 將數(shù)據(jù)接收到箱子中
- 解析數(shù)據(jù)包,并打印數(shù)據(jù)
- 釋放資源
代碼演示發(fā)送端
DatagramSocket ds = new DatagramSocket();DatagramPacket dp = new DatagramPacket("UDP組播".getBytes(),"UDP組播".getBytes().length, InetAddress.getByName("224.0.1.0"),8888);ds.send(dp);ds.close();代碼演示接收端
MulticastSocket ms = new MulticastSocket();DatagramPacket dp = new DatagramPacket(new byte[1024],1024);ms.joinGroup(InetAddress.getByName("224.0.1.0"));ms.receive(dp);byte[] data = dp.getData();int length = dp.getLength();ms.close();UDP廣播實(shí)現(xiàn)
-
實(shí)現(xiàn)步驟
- 發(fā)送端
- 創(chuàng)建發(fā)送端Socket對象(DatagramSocket)
- 創(chuàng)建存儲(chǔ)數(shù)據(jù)的箱子,將廣播地址封裝進(jìn)去
- 發(fā)送數(shù)據(jù)
- 釋放資源
- 接收端
- 創(chuàng)建接收端的Socket對象(DatagramSocket)
- 創(chuàng)建一個(gè)數(shù)據(jù)包,用于接收數(shù)據(jù)
- 調(diào)用DatagramSocket對象的方法接收數(shù)據(jù)
- 解析數(shù)據(jù)包,并把數(shù)據(jù)在控制臺顯示
- 關(guān)閉接收端
代碼演示發(fā)送端
DatagramSocket ds = new DatagramSocket();DatagramPacket dp = new DatagramPacket("廣播UDP".getBytes(),"廣播UDP".getBytes().length,InetAddress.getByName("255.255.255.255"),8888);ds.send(dp);ds.close();代碼演示接收端
DatagramSocket ds = new DatagramSocket(8888);DatagramPacket dp = new DatagramPacket(new byte[1024],1024);ds.receive(dp);byte[] data = dp.getData();int length = dp.getLength();ds.close();總結(jié)
- 上一篇: [html] viewport常见设置
- 下一篇: 梦龙即时通讯软件测试初学者,梦龙即时通讯