下面是我的广播测试例子
运行服务器: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();
}
}
}
}
运行服务器: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();
}
}
}
}
解决方案 »
- 高分回报!java文件编译成class文件?
- 关于反射jdk的一个问题, 难道jdk 有 bug???
- 谁会JAVA编写一个能浏览我的电脑和打开网页的的程序例子啊
- 关于rethrowing
- 关于数据库操作的奇怪问题
- 一个奇怪的文件输出问题,还请高手指点!!!!
- javabean ,bean,ejb怎么样区别?
- 关于SESSION的问题??
- 我的jb7不能调试applet了! Error #: 314 : cannot access class com.ms.com.IUnknown!
- 请教一个有关weblogic的问题!
- 怎么做JCheckBox的全选和全不选的按钮
- java 中 jtextarea 或 java中哪个组件能实现这个功能
也许你机器中,当时情况内核是不允许发组播包的(即这个选项没有打开,客户机当然就收不到包了),而网络抓包工具刚好帮你打开了这个选项。这样也会出现你所说的奇怪的现象。
之后,仍然不能在我本机上接收到。
在其他人的机器上都是正常的,并且从别人机器上的服务器发出的UDP广播,我的客户端也是可以太收到的
太奇怪了
可能有哪些网络设置或者服务影响这个问题?