简单讲解Java的Socket网络编程的多播与广播实现
|
在Java中,我们可以有很多种方法来发送和接收数据。有的方法比较靠近底层,有些问题就需要程序员自己去解决,而有些方法抽象层次比较高,很方便地就可以拿来使用。这些处理数据的方法根据抽象层次由低到高分别有: 1.手动编码:使用位运算逐个自己编码和解析。 2.利用流来自动编码:组合使用OutputStream和ByteArrayOutputStream。 3.序列化:将数据放入一个数据对象中,直接将这个对象序列化后发送。 4.RMI:将对方法的调用都发送过去了,直接实现了方法的远程调用。
1.整型的发送:要考虑是大尾端还是小尾端,是无符号的还是有符号的整数。 2.字符串的发送:要考虑编码问题。 3.无长度限制的类型,如大整数:要编码成帧Frame,通过定界符或者长度位 多播与广播 我们可以向每个接受者单播一个数据副本,但这样做效率可能非常低。
public class MulticastReceiverTest {
public static void main(String[] args) throws Exception {
final InetAddress address = InetAddress.getByName("224.1.1.1");
final int port = 45599;
for (int i = 0; i < 5; i++) {
new Thread("Thread #" + i){
@Override
public void run() {
try {
MulticastSocket sock = new MulticastSocket(port);
sock.joinGroup(address);
byte[] msg = new byte[256];
DatagramPacket packet = new DatagramPacket(msg,msg.length);
sock.receive(packet);
System.out.println(Thread.currentThread().getName() +
" receive: " + new String(packet.getData()));
}
catch (IOException e) {
e.printStackTrace();
}
}
}.start();
}
Thread.sleep(2000);
MulticastSocket sock = new MulticastSocket();
sock.setTimeToLive(32);
byte[] msg = "hellomulticast".getBytes();
DatagramPacket packet = new DatagramPacket(msg,msg.length,address,port);
sock.send(packet);
System.out.println("Message sent");
}
}
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
