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 {//关闭socketsocket.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 {//关闭socketsocket.close();}}
}