UDP广播收不到

liaomingxue none 服务器端工程师  2008-11-28 03:30:14
下面是我的广播测试例子
运行服务器: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();
}
}
}
}
...全文
286 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
goofychan 2010-06-28
奇怪,我也是抓包能抓到,UDP收不到……
回复
liaomingxue 2008-12-02
socket.setBroadCast(true);
之后,仍然不能在我本机上接收到。
在其他人的机器上都是正常的,并且从别人机器上的服务器发出的UDP广播,我的客户端也是可以太收到的
太奇怪了
可能有哪些网络设置或者服务影响这个问题?

[Quote=引用 8 楼 jiangnaisong 的回复:]
答:在发送方代码中,加上:socket.setBroadCast(true);试试。
也许你机器中,当时情况内核是不允许发组播包的(即这个选项没有打开,客户机当然就收不到包了),而网络抓包工具刚好帮你打开了这个选项。这样也会出现你所说的奇怪的现象。
[/Quote]
回复
云上飞翔 2008-11-28
答:在发送方代码中,加上:socket.setBroadCast(true);试试。
也许你机器中,当时情况内核是不允许发组播包的(即这个选项没有打开,客户机当然就收不到包了),而网络抓包工具刚好帮你打开了这个选项。这样也会出现你所说的奇怪的现象。
回复
liaomingxue 2008-11-28
兄弟详细些?

[Quote=引用 6 楼 Wing198812 的回复:]
检查下网络的相关设置
[/Quote]
回复
SylvanLiu 2008-11-28
检查下网络的相关设置
回复
云上飞翔 2008-11-28
[Quote=引用 2 楼 liaomingxue 的回复:]
难道有网络设置方面的问题么?
卡巴斯基的防火墙我已经关了

引用 1 楼 jiangnaisong 的回复:
答:程序在我机器上运行一切正常。什么问题也没有。客户机都能正常收到包。
[/Quote]
答:不是很清楚。因为在我的机器上运行程序时,我的卡巴斯基与360都在运行我都没有关。
回复
liaomingxue 2008-11-28
呵呵,我都是在我自己的机器上测试呢

[Quote=引用 3 楼 kampan 的回复:]
两端的防火墙都关了试试
[/Quote]
回复
kampan 2008-11-28
两端的防火墙都关了试试
回复
liaomingxue 2008-11-28
难道有网络设置方面的问题么?
卡巴斯基的防火墙我已经关了

[Quote=引用 1 楼 jiangnaisong 的回复:]
答:程序在我机器上运行一切正常。什么问题也没有。客户机都能正常收到包。
[/Quote]
回复
云上飞翔 2008-11-28
答:程序在我机器上运行一切正常。什么问题也没有。客户机都能正常收到包。
回复
发动态
发帖子
Java SE
创建于2007-09-28

6.1w+

社区成员

Java 2 Standard Edition
申请成为版主
社区公告
暂无公告