本来想google一些广播的例子,结果出来了很多都是MulticastSocket实现的。
自己半猜着写个向广播地址发的程序,结果一下都成功了。
在局域网的两台机器上,一台跑server向广播地址的某端口发,一台做客户机监听某端口。
和多播一样向广播地址发实际就是给路由或者交换机发,通过这些设备在局域网里广播。
代码如下:
- package cn.kk.socket;
- import java.net.DatagramPacket;
- import java.net.DatagramSocket;
- import java.net.InetAddress;
- public class BroadCastTest {
- public static void main(String args[])throws Exception{
- //sendBroadcast();
- receiveBroadcast();
- }
- public static void sendBroadcast()throws Exception{
- DatagramSocket socket;
- DatagramPacket packet;
- byte[] data={1,2,3,4};
- socket = new DatagramSocket();
- socket.setBroadcast(true); //有没有没啥不同
- //send端指定接受端的端口,自己的端口是随机的
- packet = new DatagramPacket(data,data.length,InetAddress.getByName("255.255.255.255"),8300);
- for(int i = 0 ; i < 50 ; i++){
- Thread.sleep(1000);
- socket.send(packet);
- }
- }
- public static void receiveBroadcast()throws Exception{
- byte[] buffer = new byte[65507];
- DatagramSocket server = new DatagramSocket(8300);
- DatagramPacket packet = new DatagramPacket(buffer , buffer.length);
- for(;;){
- server.receive(packet);
- String s = new String(packet.getData( ), 0, packet.getLength( ));
- System.out.println(packet.getAddress( ) + " at port "
- + packet.getPort( ) + " says " + s);
- }
- }
- }