UDP广播收不到
下面是我的广播测试例子
运行服务器:java broadcastdemo.BroadcastDemo server 230.0.0.1 9999
运行客户端:java broadcastdemo.BroadcastDemo client 230.0.0.1 9999
但是无论如何,客户端收不到任何消息!
如果打开某个网络抓包工具进行监控,那么可以看到服务器发出的包,并且十分奇怪的是,此时客户端也能正常接收所有消息。
何故?
package broadcastdemo;
import java.net.*;
import java.util.*;
public class BroadcastDemo
{
public static void main(String[] args)
{
if(args[0].equals("server"))
{
(new Server(args[1], Integer.parseInt(args[2]))).start();
}
else if(args[0].equals("client"))
{
(new Client(args[1], Integer.parseInt(args[2]))).start();
}
}
}
class Client extends Thread
{
int port; //组播的端口.
InetAddress group=null; //组播组的地址.
MulticastSocket socket=null; //多点广播套接字.
public Client(String groupAddr,int port)
{
this.port=port;
try
{
group=InetAddress.getByName(groupAddr);
socket=new MulticastSocket(port);
socket.joinGroup(group);
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void run()
{
DatagramPacket packet=null;
while(true)
{
byte data[]=new byte[256];
packet=new DatagramPacket(data,data.length); //待接收的数据包。
try
{
socket.receive(packet);
String message=new String(packet.getData(),0,packet.getLength());
System.out.println(message);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}
class Server extends Thread
{
InetAddress group=null; //组播组的地址.
MulticastSocket socket=null; //多点广播套接字.
int port;
Server(String groupAddr,int port)
{
try
{
group=InetAddress.getByName(groupAddr);
this.port=port;
socket=new MulticastSocket(port);
//socket.setTimeToLive(1);
socket.joinGroup(group);
//可以被加入到group中的成员接收到。
}
catch(Exception e)
{
e.printStackTrace();
}
}
public void run()
{
while(true)
{
try
{
DatagramPacket packet=null; //待广播的数据包。
byte data[]=(new Date()).toString().getBytes();
packet=new DatagramPacket(data,data.length,group,port);
socket.send(packet); //广播数据包。
System.out.println(new String(data));
sleep(5000);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
}