Chinaunix首页 | 论坛 | 博客

acc

  • 博客访问: 792513
  • 博文数量: 170
  • 博客积分: 7011
  • 博客等级: 少将
  • 技术积分: 1660
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-31 12:02
文章分类

全部博文(170)

文章存档

2014年(7)

2010年(2)

2009年(62)

2008年(25)

2007年(67)

2006年(7)

我的朋友

分类: Java

2006-08-21 23:41:12

问题提示:(eclipse3.2)
java.net.SocketException: Not a multicast address
at java.net.MulticastSocket.joinGroup(Unknown Source)
at Receive.(Receive.java:24)
at Receive.main(Receive.java:122)
问题位置:
try
{
group=InetAddress.getByName("127.0.0.1");
socket=new MulticastSocket(port);
socket.joinGroup(group);
}
一个网上好人给的答案:
java.net 
类 MulticastSocket
java.lang.Object
 java.net.DatagramSocket
 java.net.MulticastSocket

--------------------------------------------------------------------------------

public class MulticastSocketextends DatagramSocket多播数据报套接字类用于发送和接收 IP 多播包。MulticastSocket 是一种 (UDP) DatagramSocket,它具有加入 Internet 上其他多播主机的“组”的附加功能。 

多播组通过 D 类 IP 地址和标准 UDP 端口号指定。D 类 IP 地址在 224.0.0.0 和 239.255.255.255 的范围内(包括两者)。地址 224.0.0.0 被保留,不应使用。 

可以通过首先使用所需端口创建 MulticastSocket,然后调用 joinGroup(InetAddress groupAddr) 方法来加入多播组: 

 // join a Multicast group and send the group salutations
 ...
 String msg = "Hello";
 InetAddress group = InetAddress.getByName("228.5.6.7");
 MulticastSocket s = new MulticastSocket(6789);
 s.joinGroup(group);
 DatagramPacket hi = new DatagramPacket(msg.getBytes(), msg.length(),
 group, 6789);
 s.send(hi);
 // get their responses!
byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK, I'm done talking - leave the group...
 s.leaveGroup(group);
 将消息发送到多播组时,该主机和端口的所有预定接收者都将接收到消息(在数据包的生存时间范围内,请参阅下文)。套接字不必成为多播组的成员即可向其发送消息。 
当套接字预定多播组/端口时,它将接收由该组/端口的其他主机发送的数据报,像该组和端口的所有其他成员一样。套接字通过 leaveGroup(InetAddress addr) 方法放弃组中的成员资格。多个 MulticastSocket 可以同时预定多播组和端口,并且都会接收到组数据报。 

同时,不允许 applet 使用多播套接字。
阅读(5217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~