java udp 多播 广播_Java UDP 广播与多播
1、廣播:
同一網段所有主機都能接收,前提是端口要監聽
客戶端發送廣播,開啟端口監聽的服務端接收并打印消息
服務端程序:
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;//開啟監聽的端口
DatagramSocket?ds?=?null;
DatagramPacket?dp?=?null;
byte[]?buf?=?new?byte[1024];//存儲發來的消息
StringBuffer?sbuf?=?new?StringBuffer();
try?{
//綁定端口的
ds?=?new?DatagramSocket(port);
dp?=?new?DatagramPacket(buf,?buf.length);
System.out.println("監聽廣播端口打開:");
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();
}
}
}
發送端程序:
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)?{
//?廣播的實現?:由客戶端發出廣播,服務器端接收
String?host?=?"255.255.255.255";//廣播地址
int?port?=?9999;//廣播的目的端口
String?message?=?"test";//用于發送的字符串
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、多播
多播數據報套接字類用于發送和接收 IP 多播包。MulticastSocket 是一種 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主機的“組”的附加功能。
多播組通過 D 類 IP 地址和標準 UDP 端口號指定。D 類 IP 地址在 224.0.0.0 和 239.255.255.255 的范圍內(包括兩者)。地址 224.0.0.0 被保留,不應使用。
可以通過首先使用所需端口創建 MulticastSocket,然后調用 joinGroup(InetAddress groupAddr) 方法來加入多播組:(以上是jdk-doc的說明,補充如下:服務器和客戶端必須都要加入相同的組播地址才可以)
服務器端程序:
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){
//接受組播和發送組播的數據報服務都要把組播地址添加進來
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("監聽多播端口打開:");
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();
}
}
}
簡單實現了一下基于UDP的廣播和多播的功能,主要是理解多播和廣播的概念。尤其是組播,以前停留在概念上,只知道是傳送給一組主機而不是所有主機,今天才豁然了。
歡迎轉載,但請引用本文鏈接。
總結
以上是生活随笔為你收集整理的java udp 多播 广播_Java UDP 广播与多播的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 13款途观l.8T是正时皮带还是正时链条
- 下一篇: java八种语言_Java语言八种基本类