MulticastSocket 实现UDP组播,为什么多个程序可以绑定一台计算机的同一个端口?
接收端:
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
public class ServerDemo {
public static void main(String[] args) throws IOException {
// 这里绑定到 10000 端口上了
MulticastSocket ms = new MulticastSocket(10000);
DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);
// 把当前计算机绑定一个组播地址,表示添加到这一组中
ms.joinGroup(InetAddress.getByName("224.0.1.0"));
ms.receive(dp);
System.out.println(new String(dp.getData(), 0, dp.getLength()));
System.out.println(dp.getAddress().getHostAddress());
System.out.println(dp.getPort());
ms.close();
}
}
发送端:
import java.io.IOException;
import java.net.*;
public class ClientDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket();
String s = "hello,组播";
byte[] bytes = s.getBytes();
InetAddress address = InetAddress.getByName("224.0.1.0");
int port = 10000;
DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
ds.send(dp);
ds.close();
}
}
不是说同一个端口被一个程序占用时就不能被其他程序占用吗?为什么接收端可以同时多次运行也不报Bind异常呢?
PS.这个程序能正确执行,多开的每个程序都能接收到信息
这是什么原理呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论