讲解Java的Socket网络编程的多播与广播实现
在Java中,我们可以有很多种方法来发送和接收数据。有的方法比较靠近底层,有些问题就需要程序员自己去解决,而有些方法抽象层次比较高,很方便地就可以拿来使用。这些处理数据的方法根据抽象层次由低到高分别有:
1.手动编码:使用位运算逐个自己编码和解析。
2.利用流来自动编码:组合使用OutputStream和ByteArrayOutputStream。
3.序列化:将数据放入一个数据对象中,直接将这个对象序列化后发送。
使用起来很方便,但要注意效率的损失,以及接收方也要使用Java。
:将对方法的调用都发送过去了,直接实现了方法的远程调用。
在最底层的`方法1中,我们需要自己解决一些底层的问题:
1.整型的发送:要考虑是大尾端还是小尾端,是无符号的还是有符号的整数。
2.字符串的发送:要考虑编码问题。
3.无长度限制的类型,如大整数:要编码成帧Frame,通过定界符或者长度位
来区分每帧。
多播与广播
我们可以向每个接受者单播一个数据副本,但这样做效率可能非常低。
只有UDP套接字允许广播和多播,两者的区别是:广播会发送到网络上所有可达的
主机,有些操作系统可能不允许普通用户进行广播操作;而多播只发送给感兴趣的
主机。具体来说是调用MulticastSocket的joinGroup()加入到多播组的主机。
public class MulticastReceiverTest { public static void main(String[] args) throws Exception { final InetAddress address = yName(""); 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); Group(address); byte[] msg = new byte[256]; DatagramPacket packet = new DatagramPacket(msg, th); ive(packet); tln(entThread()ame() + " receive: " + new String(ata())); } catch (IOException e) { tStackTrace(); } } }t(); } p(2000); MulticastSocket sock = new MulticastSocket(); imeToLive(32); byte[] msg = "hellomulticast"ytes(); DatagramPacket packet = new DatagramPacket(msg, th, address, port); (packet); tln("Message sent"); }}
-
java语言的接口与继承
Java是一个面向对象的语言。对程序员来说,这意味着要注意应中的数据和操纵数据的方法,而不是严格地用过程来思考。下面是小编分享的java语言的接口与继承,一起来看一下吧。大多数人认为,接口的意义在于顶替多重继承。众所周知Java没有c++那样多重继承的机制,但是却...
-
关于Java程序员面试中的多线程问题总结
很多核心Java面试题来源于多线程(Multi-Threading)和集合框架(CollectionsFramework),理解核心线程概念时,娴熟的实际经验是必需的。这篇文章收集了Java线程方面一些典型的问题,这些问题经常被高级工程师所问到。0、Java中多线程同步是什么?在多线程程序下,同步能控...
-
java设计模式:工厂模式
导语:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。下面我们来看看工厂模式,希望对大家有所帮助。工厂设计模式★场景和问题面向接口编程是java编程中的大家所...
-
全国计算机等级《二级JAVA》命题预测试卷
以下是本站小编带来的全国计算机等级《二级JAVA》命题预测试卷,欢迎学习!更多内容请关注应届毕业生考试网!1、软件生命周期是指()。A.软件产品从提出、实现、使用维护到停止使用退役的过程B.软件从需求分析、设计、实现到测试完成的过程,C.软件的开发过程D.软件...