eva*_*van 4 java sockets networking
任何人都可以在java中向我展示一个从DatagramSocket接收数据并通过Multicast Socket发送相同数据的示例
Moh*_*igh 16
发送多播数据报
为了在Java中发送任何类型的数据报,无论是单播,广播还是组播,都需要java.net.DatagramSocket:
DatagramSocket socket = new DatagramSocket();
Run Code Online (Sandbox Code Playgroud)
可以选择将本地端口提供给套接字必须绑定到的DatagramSocket构造函数.只有在需要其他方能够在特定港口与我们联系时,才需要这样做.第三个构造函数接受本地端口和要绑定的本地IP地址.这(很少)用于多宿主主机,其中接收流量的网络适配器很重要.
DatagramSocket socket = new DatagramSocket();
byte[] b = new byte[DGRAM_LENGTH];
DatagramPacket dgram;
dgram = new DatagramPacket(b, b.length,
InetAddress.getByName(MCAST_ADDR), DEST_PORT);
System.err.println("Sending " + b.length + " bytes to " +
dgram.getAddress() + ':' + dgram.getPort());
while(true) {
System.err.print(".");
socket.send(dgram);
Thread.sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
接收多播数据报
可以使用普通的DatagramSocket发送和接收单播和广播数据报并发送多播数据报.但是,为了接收多播数据报,需要MulticastSocket.原因很简单,需要进行额外的工作来控制和接收UDP下所有协议层的多播流量.
byte[] b = new byte[BUFFER_LENGTH];
DatagramPacket dgram = new DatagramPacket(b, b.length);
MulticastSocket socket =
new MulticastSocket(DEST_PORT); // must bind receive side
socket.joinGroup(InetAddress.getByName(MCAST_ADDR));
while(true) {
socket.receive(dgram); // blocks until a datagram is received
System.err.println("Received " + dgram.getLength() +
" bytes from " + dgram.getAddress());
dgram.setLength(b.length); // must reset length field!
}
Run Code Online (Sandbox Code Playgroud)
欲获得更多信息:
| 归档时间: |
|
| 查看次数: |
24015 次 |
| 最近记录: |