java udp 多播 广播_Java UDP 广播与多播
1、廣播:
同一網(wǎng)段所有主機都能接收,前提是端口要監(jiān)聽
客戶端發(fā)送廣播,開啟端口監(jiān)聽的服務(wù)端接收并打印消息
服務(wù)端程序:
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.SocketException;
public?class?TestServer?{
public?static?void?main(String[]?args)?{
int?port?=?9999;//開啟監(jiān)聽的端口
DatagramSocket?ds?=?null;
DatagramPacket?dp?=?null;
byte[]?buf?=?new?byte[1024];//存儲發(fā)來的消息
StringBuffer?sbuf?=?new?StringBuffer();
try?{
//綁定端口的
ds?=?new?DatagramSocket(port);
dp?=?new?DatagramPacket(buf,?buf.length);
System.out.println("監(jiān)聽廣播端口打開:");
ds.receive(dp);
ds.close();
int?i;
for(i=0;i<1024;i++){
if(buf[i]?==?0){
break;
}
sbuf.append((char)?buf[i]);
}
System.out.println("收到廣播消息:"?+?sbuf.toString());
}?catch?(SocketException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
發(fā)送端程序:
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.SocketException;
import?java.net.UnknownHostException;
public?class?Test?{
public?static?void?main(String[]?args)?{
//?廣播的實現(xiàn)?:由客戶端發(fā)出廣播,服務(wù)器端接收
String?host?=?"255.255.255.255";//廣播地址
int?port?=?9999;//廣播的目的端口
String?message?=?"test";//用于發(fā)送的字符串
try?{
InetAddress?adds?=?InetAddress.getByName(host);
DatagramSocket?ds?=?new?DatagramSocket();
DatagramPacket?dp?=?new?DatagramPacket(message.getBytes(),
message.length(),?adds,?port);
ds.send(dp);
ds.close();
}?catch?(UnknownHostException?e)?{
e.printStackTrace();
}?catch?(SocketException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
2、多播
多播數(shù)據(jù)報套接字類用于發(fā)送和接收 IP 多播包。MulticastSocket 是一種 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主機的“組”的附加功能。
多播組通過 D 類 IP 地址和標(biāo)準(zhǔn) UDP 端口號指定。D 類 IP 地址在 224.0.0.0 和 239.255.255.255 的范圍內(nèi)(包括兩者)。地址 224.0.0.0 被保留,不應(yīng)使用。
可以通過首先使用所需端口創(chuàng)建 MulticastSocket,然后調(diào)用 joinGroup(InetAddress groupAddr) 方法來加入多播組:(以上是jdk-doc的說明,補充如下:服務(wù)器和客戶端必須都要加入相同的組播地址才可以)
服務(wù)器端程序:
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.MulticastSocket;
import?java.net.SocketException;
public?class?TestServer?{
public?static?void?main(String[]?args){
//接受組播和發(fā)送組播的數(shù)據(jù)報服務(wù)都要把組播地址添加進來
String?host?=?"225.0.0.1";//多播地址
int?port?=?9998;
int?length?=?1024;
byte[]?buf?=?new?byte[length];
MulticastSocket?ms?=?null;
DatagramPacket?dp?=?null;
StringBuffer?sbuf?=?new?StringBuffer();
try?{
ms?=?new?MulticastSocket(port);
dp?=?new?DatagramPacket(buf,?length);
//加入多播地址
InetAddress?group?=?InetAddress.getByName(host);
ms.joinGroup(group);
System.out.println("監(jiān)聽多播端口打開:");
ms.receive(dp);
ms.close();
int?i;
for(i=0;i<1024;i++){
if(buf[i]?==?0){
break;
}
sbuf.append((char)?buf[i]);
}
System.out.println("收到多播消息:"?+?sbuf.toString());
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
客戶端程序:
import?java.io.IOException;
import?java.net.DatagramPacket;
import?java.net.DatagramSocket;
import?java.net.InetAddress;
import?java.net.MulticastSocket;
import?java.net.SocketException;
import?java.net.UnknownHostException;
public?class?Test?{
public?static?void?main(String[]?args){
String?host?=?"225.0.0.1";//多播地址
int?port?=?9998;
String?message?=?"test-multicastSocket";
try?{
InetAddress?group?=?InetAddress.getByName(host);
MulticastSocket?s?=?new?MulticastSocket();
//加入多播組
s.joinGroup(group);
DatagramPacket?dp?=?new?DatagramPacket(message.getBytes(),message.length(),group,port);
s.send(dp);
s.close();
}?catch?(UnknownHostException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}
}
}
簡單實現(xiàn)了一下基于UDP的廣播和多播的功能,主要是理解多播和廣播的概念。尤其是組播,以前停留在概念上,只知道是傳送給一組主機而不是所有主機,今天才豁然了。
歡迎轉(zhuǎn)載,但請引用本文鏈接。
總結(jié)
以上是生活随笔為你收集整理的java udp 多播 广播_Java UDP 广播与多播的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13款途观l.8T是正时皮带还是正时链条
- 下一篇: 长葛金桥农机配件城有雷沃谷神ge90s-