日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

java udp 多播 广播_Java UDP 广播与多播

發(fā)布時(shí)間:2025/4/5 java 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java udp 多播 广播_Java UDP 广播与多播 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、廣播:

同一網(wǎng)段所有主機(jī)都能接收,前提是端口要監(jiān)聽(tīng)

客戶(hù)端發(fā)送廣播,開(kāi)啟端口監(jiān)聽(tīng)的服務(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;//開(kāi)啟監(jiān)聽(tīng)的端口

DatagramSocket?ds?=?null;

DatagramPacket?dp?=?null;

byte[]?buf?=?new?byte[1024];//存儲(chǔ)發(fā)來(lái)的消息

StringBuffer?sbuf?=?new?StringBuffer();

try?{

//綁定端口的

ds?=?new?DatagramSocket(port);

dp?=?new?DatagramPacket(buf,?buf.length);

System.out.println("監(jiān)聽(tīng)廣播端口打開(kāi):");

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)?{

//?廣播的實(shí)現(xiàn)?:由客戶(hù)端發(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ù)報(bào)套接字類(lèi)用于發(fā)送和接收 IP 多播包。MulticastSocket 是一種 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主機(jī)的“組”的附加功能。

多播組通過(guò) D 類(lèi) IP 地址和標(biāo)準(zhǔn) UDP 端口號(hào)指定。D 類(lèi) IP 地址在 224.0.0.0 和 239.255.255.255 的范圍內(nèi)(包括兩者)。地址 224.0.0.0 被保留,不應(yīng)使用。

可以通過(guò)首先使用所需端口創(chuàng)建 MulticastSocket,然后調(diào)用 joinGroup(InetAddress groupAddr) 方法來(lái)加入多播組:(以上是jdk-doc的說(shuō)明,補(bǔ)充如下:服務(wù)器和客戶(hù)端必須都要加入相同的組播地址才可以)

服務(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ù)報(bào)服務(wù)都要把組播地址添加進(jìn)來(lái)

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)聽(tīng)多播端口打開(kāi):");

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();

}

}

}

客戶(hù)端程序:

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();

}

}

簡(jiǎn)單實(shí)現(xiàn)了一下基于UDP的廣播和多播的功能,主要是理解多播和廣播的概念。尤其是組播,以前停留在概念上,只知道是傳送給一組主機(jī)而不是所有主機(jī),今天才豁然了。

歡迎轉(zhuǎn)載,但請(qǐng)引用本文鏈接。

總結(jié)

以上是生活随笔為你收集整理的java udp 多播 广播_Java UDP 广播与多播的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。