互联网程序设计第五章简答题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章简答题
1.简要描述Java UDP套接字技术与Java TCP协议套接字技术的不同。
答:TCP将传输的数据看做是网络流,UDP则不同。UDP处理的都是单个报文,上一个报文和下一个报文不一定有必然的联系。就通信形式而言,TCP类似生活中的电话通信模式,UDP则类似书信往来。
2.DatagramSocket也有一个connect()方法,作用是否与Socket中的connect()方法相同?
答:不相同。TCP/IP的connect()是要有一个三次握手的过程的,而UDP的connect 显然没有,它只是将IP地址和端口号进行了存储,对要进行通信的对象做了一个限制。而且TCP/IP的connect()只可以进行一次,但是UDP的connect()可以调用多次。
3.什么是广播、组播?两者有什么区别?简要描述利用MulticastSocket加入组播和退出组播的方法。
答:广播:广播是多点投递的最普遍的形式,它向每一个目的站投递一个分组的拷贝。它可以通过多个单次分组的投递完成,也可以通过单独的连接传递分组的拷贝,直到每个接收方均收到一个拷贝为止。在多数网络中,用户是通过把分组分送给一个特殊保留的地址即广播地址来进行广播投递,它的主要缺点是会耗费大量的主机资源和网络资源。
组播:组播是一种多点投递的形式,它使用硬件技术,通过使用大量组播地址来通信。当某一组机器需要通信时,选择一个组播地址,并配置好相应的网络接口硬件,识别组播地址,从而收到该组播地址上分组的拷贝。
利用MulticastSocket
加入组播:要加入一个组,可以将组播组的InetAddress 或SocketAddress对象传递给joinGroup()方法:
public void joinGroup(InetAddress address) throws IOException
public void joinGroup(SocketAddress address, NetworkInterface interface)
throws I0Exception
一旦加入组播组,接收数据报就与前一章接收单播数据报完全一样。也就是说,建立一个DatagramPacket作为缓冲区,把它传入这个socket的receive()方法。例如:
try {
MulticastSocket ms = new MulticastSocket(4000);
InetAddress ia = InetAddress .getByName("224.2.2.2");
ms. joinGroup(ia);
byte[] buffer = new byte[8192];
while (true) {
DatagramPacket dp = new DatagramPacket(buffer, buffer .length);
ms.receive(dp);
String s = new String(dp.getData(),“8859_1");
System. out .println(s);
}
} catch (I0Exception ex) {
System. err . println(ex);
}
退出组播:不再希望接收来自指定组播组的数据报时可以调用leaveGroup()方法,可以在所有网络接口上调用,也可以在指定的网络接口上调用:
public void leaveGroup(InetAddress address) throws IOException
public void leaveGroup(SocketAddress multicastAddress ,
NetworkInterface interface)
throws IOException
这会通知本地组播路由器,告诉它停止向你发送数据报。如果试图离开的地址不是一个组播地址(即不在224.0.0.0和239.255.255.255之间) ,这个方法会抛出一个IOException异常。不过,如果离开一个从未加入的组播组,则不会产生异常。
4.DatagramSocket的setAddress() 方法会修改报文发往的地址,这允许将同一个报文发送给多个接收方。但是若要向一个网段上所有用户发送,最好使用本地广播地址。请问如何根据网段号确定本地广播地址?
答:
1、先将ip地址和子网掩码换算成二进制形式。
如:ip:200.200.200.200 二进制:11001000.11001000.11001000.11001000 2、求网络地址:子网掩码为1的部分,对应的地址即为网络地址。
如上例:用ip地址和掩码各位用‘与’方式计算,得到的二进制为:11001000.11001000.11001000.11000000,这个就是网络地址,换算成十进制为:200.200.200.192。
3、求广播地址:子网掩码为0的部分,对应的ip地址全为1的地址,则是广播地址。
如上例,则需把ip地址中的第4位,改成11111111,其他前三位不变,就是广播地址。其二进制为11001000.11001000.11001000.11111111,转换成十进制为200.200.200.255。
5.简述对象的序列化和反序列化过程。
答:序列化:就是将内存中的对象转换为字节序列,方便持久化到磁盘或者网络传输。
对象序列化过程可以分为两步:
第一: 将对象转换为字节数组;
第二: 将字节数组存储到磁盘。
反序列化:就是将字节序列转换为内存中的对象,可以是文件中的,也可以是网络传输过来的。