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)的主要内容,如果未能解决你的问题,请参考以下文章