我建立一个MulticastSocket之后,通过socket发送数据之后再接收数据,不成功,接收时被阻塞。为何呢?理论上由于有数据,那么应该不会被阻塞才对啊。
代码如下:
package recmail.multiservice;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;public class MultiSender {
public static final int PORT = 8888;
public static final String ADDR = "224.0.0.8"; private MulticastSocket sock; private InetAddress netAddr; public MultiSender() {
try {
// 组播地址
netAddr = InetAddress.getByName(ADDR);
sock = new MulticastSocket(PORT);
sock.joinGroup(netAddr);
} catch (UnknownHostException ex) {} catch (IOException ex) {}
} public void send(byte[] b) {
DatagramPacket dp = new DatagramPacket(b, 0, b.length, netAddr, PORT);
try {
sock.send(dp);
System.out.println("sent");
byte[] buf = new byte[1024];
DatagramPacket rcv = new DatagramPacket(buf, buf.length);
sock.receive(rcv);
System.out.println("receive:" + new String(rcv.getData()));
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
MultiSender sender = new MultiSender();
sender.send("yhaha".getBytes());
}
}
代码如下:
package recmail.multiservice;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;public class MultiSender {
public static final int PORT = 8888;
public static final String ADDR = "224.0.0.8"; private MulticastSocket sock; private InetAddress netAddr; public MultiSender() {
try {
// 组播地址
netAddr = InetAddress.getByName(ADDR);
sock = new MulticastSocket(PORT);
sock.joinGroup(netAddr);
} catch (UnknownHostException ex) {} catch (IOException ex) {}
} public void send(byte[] b) {
DatagramPacket dp = new DatagramPacket(b, 0, b.length, netAddr, PORT);
try {
sock.send(dp);
System.out.println("sent");
byte[] buf = new byte[1024];
DatagramPacket rcv = new DatagramPacket(buf, buf.length);
sock.receive(rcv);
System.out.println("receive:" + new String(rcv.getData()));
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
MultiSender sender = new MultiSender();
sender.send("yhaha".getBytes());
}
}
DatagramPacket dp = new DatagramPacket(b, 0, b.length, netAddr, PORT);
你可以改成
public void send(byte[] b) {
DatagramPacket dp = new DatagramPacket(b, b.length, netAddr, PORT);