Java期末考试试题及参考答案(13)

Posted 谷哥的小弟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java期末考试试题及参考答案(13)相关的知识,希望对你有一定的参考价值。


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

一、填空题

1.TCP/IP协议被分为四个层,分别是________、________ 、________ 、________。
2.传输层主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用________协议。
3.在下载文件时必须采用________协议。
4.JDK提供了一个________类,该类可以发送和接收数据包。
5.在JDK中提供了两个用于实现TCP程序的类,一个是________类,用于表示服务器端;一个是Socket类,用于表示客户端。

二、判断题

1.DatagramSocket类中提供了accept()方法用于接收数据报包。()
2.端口号是由4个字节大小的二进制数来表示的。()
3.TCP协议是面向连接的通信协议,每次连接的创建都需要经过“三次握手”。 ()
4.在创建发送端的DatagramPacket对象时,需要指定发送端的目标IP地址和端口号。()
5.java.net包中的DatagramPacket类用于封装UDP通信中发送或者接收的数据。()

三、选择题

1.下列关于Socket类的描述中,错误的是( )
A、Socket类中定义的getInputStream()方法用于返回Socket的输入流对象。
B、Socket类中定义的getOutputStream()方法用于返回Socket的输出流对象。
C、Socket类中定义的getLocalAddress()方法用于获取Socket对象绑定的本地IP地址。
D、Socket类中定义的close()方法用于关闭输入/输出流对象。
2.下列ServerSocket类的方法中,用于接收来自客户端请求的方法是( )
A、accept()
B、getOutputStream()
C、receive()
D、get()
3.下列关于UDP协议特点的描述中,错误的是( )
A、在UDP协议中,数据的发送端和接收端不建立逻辑连接。
B、UDP协议消耗资源小,通信效率高,通常都会用于音频、视频和普通数据的传输。
C、UDP协议在传输数据时不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。
D、在UDP协议连接中,必须要明确客户端与服务器端。
4.使用UDP协议通信时,需要使用哪个类把要发送的数据打包()
A、Socket
B、DatagramSocket
C、DatagramPacket
D、ServerSocket
5.下面关于IP地址的描述中,错误的是()
A、IP地址可以唯一标识一台计算机
B、IP地址目前的两个常用版本分别是IPv4和IPv6
C、IP地址每个字节用一个十进制数字(0-255)表示
D、192.168.1.360是一个合格的IP地址

四、简答题

1.请简述TCP通信与UDP通信的主要区别。
2.请简述TCP协议中服务端与客户端连接过程。

五、编程题

使用基于UDP的Java Socket编程,完成在线咨询功能:
1、客户向咨询人员咨询。
2、咨询人员给出回答。
3、客户和咨询人员可以一直沟通,直到客户发送bye给咨询人员时通话结束。

参考答案

一、
1.链路层、网络层、运输层、应用层
2.UDP
3.TCP
4.DatagramSocket
5.ServerSocket
二、
1.错
2.错
3.对
4.对
5.对
三、
1.D
2.A
3.D
4.C
5.D
四、
1.UDP通信与TCP通信的区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据;而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。
2.在TCP连接中必须要明确客户端与服务器端,由客户端向服务器端发出连接请求,每次连接的创建都需要经过“三次握手”。第一次握手,客户端向服务器端发出连接请求,等待服务器确认;第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求;第三次握手,客户端再次向服务器端发送确认信息,确认连接。

五、

AskServer.java

public class AskServer 
     public static void main(String[] args) 
         //创建DatagramSocket,发送接收数据都依赖他
         DatagramSocket socket = null;
         try 
             socket = new DatagramSocket(8888);
             Scanner input = new Scanner(System.in);
             while (true) 
                 //准备一个空的数据包,用来接收数据
                byte[] buf = new byte[1024];
                DatagramPacket packet = new DatagramPacket(buf, buf.length);
                 //接收数据使用空的数据包
                socket.receive(packet);
                 //输出信息
                 String info = new String(packet.getData(), 0, 							   packet.getLength());
                 System.out.println("客户端请求:" + info);
                 //判断是否退出
                 if ("bye".equals(info)) 
                     break;
                
                 //发送数据
                 String result = input.nextLine();
                 byte[] buf2 = result.getBytes();
                 DatagramPacket packet2 = new DatagramPacket(buf2, 						   buf2.length,packet.getAddress(), packet.getPort());
                 socket.send(packet2);
             
         catch (SocketException e) 
             e.printStackTrace();
          catch (IOException e) 
             e.printStackTrace();
          finally 
             //关闭socket
             socket.close();
         
     
 

AskClient.java

public class AskClient 
     public static void main(String[] args) 
         //创建DatagramSocket,发送接收数据都依赖他
         DatagramSocket socket = null;
         try 
             socket = new DatagramSocket(9999);
             Scanner input = new Scanner(System.in);
             while (true)
                 //准备要发送的数据
                 String str = input.nextLine();//bye
                 //使用数据包把数据封装起来
                 byte[] buf = str.getBytes();
                 DatagramPacket packet = new DatagramPacket(buf, buf.length,
                        InetAddress.getByName("192.168.1.252"), 8888);
                 //发送数据包
                 socket.send(packet);
                 //判断是否退出
                 if ("bye".equals(str)) 
                     break;
                 
                 //接收数据
                 byte[] buf2 = new byte[1024];
                 DatagramPacket packet2 = new DatagramPacket(buf2, 						   buf2.length);
                 socket.receive(packet2);
                 System.out.println("服务器端反馈:"+
			   new String(packet2.getData(), 0, packet2.getLength()));
            
          catch (SocketException e) 
             e.printStackTrace();
          catch (IOException e) 
            e.printStackTrace();
          finally 
             //关闭socket
             socket.close();
         
     

以上是关于Java期末考试试题及参考答案(13)的主要内容,如果未能解决你的问题,请参考以下文章

Java期末考试试题及参考答案(01)

Java期末考试试题及参考答案(01)

Java期末考试试题及参考答案(07)

Java期末考试试题及参考答案(07)

Java期末考试试题及参考答案(02)

Java期末考试试题及参考答案(06)