JavaSocket编程题库
⼀、填空题
1.  ___ IP地址____⽤来标志⽹络中的⼀个通信实体的地址。通信实体可以是计算机,路由器等。
2. 统⼀资源定位符URL是指向互联⽹“资源”的指针,由4部分组成:协议、存放资源的主机域名、__端⼝___和资源路径和⽂件名。
3.    URL  是统⼀资源定位器的简称,它表⽰Internet上某⼀资源的地址。
4. 在Socket编程中,IP地址⽤来标志⼀台计算机,但是⼀台计算机上可能提供多种应⽤程序,使⽤端⼝来区分这些应⽤程序。
5. 在Java Socket⽹络编程中,开发基于TCP协议的服务器端程序使⽤的套接字是    ServerSocket  。
6. 在Java Socket⽹络编程中,开发基于UDP协议的程序使⽤的套接字是  DatagramSocket  。
⼆、选择题
1.以下协议都属于TCP/IP协议栈,其中位于传输层的协议是(AD)。(选择⼆项)
A TCP
B.HTTP
C.SMTP
D.UDP
2.以下协议中属于TCP/IP协议栈中应⽤层协议的是(A)。(选择⼀项)
A HTTP
B.TCP
C.UDP
D.IP
3.以下说法中关于UDP协议的说法正确的是(AD)。(选择⼆项)
A.发送不管对⽅是否准备好,接收⽅收到也不确认
B.⾯向连接
C.占⽤系统资源多、效率低
D.⾮常简单的协议,可以⼴播发送
4.在基于TCP⽹络通信模式中,客户与服务器程序的主要任务是(BC)。(选择⼆项)
A 客户程序在⽹络上到⼀条到达服务器的路由
B.客户程序发送请求,并接收服务器的响应
C.服务器程序接收并处理客户请求,然后向客户发送响应结果
D.如果客户程序和服务器都会保证发送的数据不会在传输途中丢失
5.在Java⽹络编程中,使⽤客户端套接字Socket创建对象时,需要指定(A)。(选择⼀项)
A 服务器主机名称和端⼝
B.服务器端⼝和⽂件
socket通信在哪一层
C.服务器名称和⽂件
D.服务器地址和⽂件
6.ServerSocket的监听⽅法accept( )⽅法的返回值类型是(A )。(选择⼀项)
A.Socket
B.Void
C.Object
D.DatagramSocket
7.Java UDP Socket编程主要⽤到的两个类是(BD)。(选择⼆项)
A UDPSocket
B.DatagramSocket
C.UDPPacket
D.DatagramPacket
8.在使⽤UDP套接字通信时,常⽤(D)类把要发送的信息打包。(选择⼀项)
A String
B.DatagramSocket
C.MulticastSocket
D.DatagramPacket
三、判断题
1. Socket是传输层供给应⽤层的编程接⼝,是应⽤层与传输层之间的桥梁。( T )
2. TCP/IP传输控制协议是Internet的主要协议,定义了计算机和外设进⾏通信的规则。TCP/IP⽹络参考模型包括七个层次:应⽤层、会话层、表⽰层、传输层、⽹络层、链路层和物理层。( F )
3. TCP协议⼀种⾯向连接的、可靠的、基于字节流的通信协议。HTTP、FTP、TELNET、SMTP 都是基于TCP协议的应⽤层协议。( T )
4. UDP协议是⼀种⾯向⽆连接的、可靠的、基于字节流的传输层通信协议,该协议占⽤系统资源多、效率较低。( F )
四、简答题
1.TCP/IP协议栈中,TCP协议和UDP协议的联系和区别?
2.简述基于TCP的Socket编程的主要步骤。提⽰:分别说明服务器端和客户端的编程步骤。
3.简述基于UDP的Socket编程的主要步骤。提⽰:分别说明服务器端和客户端的编程步骤。
五、编码题
1.使⽤基于TCP的Java Socket编程,完成如下功能:
1)  要求从客户端录⼊⼏个字符,发送到服务器端。
2)  由服务器端将接收到的字符进⾏输出。
3)  服务器端向客户端发出“您的信息已收到”作为响应。
4)  客户端接收服务器端的响应信息。
提⽰:
服务器端:PrintWriter out =new OutputStream(),true);
客户端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));
服务器端:
3private ServerSocket ss; // 声明ServerSocket对象
4private Socket socket; // 声明Socket对象
5private BufferedReader in; // 声明输⼊流对象BufferedReader
6private PrintWriter out; // 声明输出流对象
7public Server()
8    {
9try
10        {
11// 创建⼀个ServerSocket,指定等待端⼝
12            ss = new ServerSocket(10000);
13while (true)
14            {
15// 使⽤ServerSocket接收⽤户请求(处于监听状态)
16                socket = ss.accept(); // 获得客户端的socket对象
17// 创建输⼊流并读取信息
18                in = new BufferedReader(new InputStreamReader(socket
19                        .getInputStream()));
20                String line = in.readLine();
21                System.out.println("客户端说:" + line);
22// 创建输出流并输出信息
23                out = new OutputStream(), true);
24                out.print("您的信息已接收!");
25// 关闭流和socket
26                out.close();
27                in.close();
28                socket.close();
29            }
30        } catch (IOException e)
31        {
32            e.printStackTrace();
33            out.println("出错了!");
34        } // 创建ServerSocket对象
35    }
36public static void main(String[] args)
37    {// 程序主⼊⼝
38// 创建对象
39new Server();
40    }
41 }
客户端:(3分)
3    Socket socket; // 声明Socket对象
4    BufferedReader in; // 声明输⼊流对象
5    PrintWriter out; // 声明输出流对象
6public Client()
7    { // 构造⽅法
8try
9        {
10// 创建Socket对象,⽤来发送请求
11            socket = new LocalHost(), 10000);
12// 创建字符缓冲区对象
13            BufferedReader line = new BufferedReader(new InputStreamReader(
14                    System.in));
15// 创建输出流对象并输出
16            out = new OutputStream(), true);
17            out.adLine());
18// 创建输⼊流对象
19            in = new BufferedReader(new InputStreamReader(socket
20                    .getInputStream()));
21            System.out.adLine());
22// 关闭流对象
23            out.close();
24            in.close();
25        } catch (Exception e)
26        {
27            e.printStackTrace();
28            System.out.println("出错了!");
29        }
30    }
31public static void main(String[] args)
32    {
33// 创建对象
34new Client();
35    }
36 }
2. 使⽤基于UDP的Java Socket编程,完成功能:
1)  客户向咨询⼈员咨询。
2)  咨询⼈员给出回答。
3)  客户和咨询⼈员可以⼀直沟通,直到客户发送bye给咨询⼈员。
1/**
2 *
3 * 咨询⼈员
4 *
5*/
6public class AskServer
7{
8public static void main(String[] args)
9    {
10//创建DatagramSocket,发送接收数据都依赖他
11        DatagramSocket socket = null;
12try
13        {
14            socket = new DatagramSocket(8888);
15            Scanner input = new Scanner(System.in);
16while (true)
17            {
18//准备⼀个空的数据包,⽤来接收数据
19byte[] buf = new byte[1024];
20                DatagramPacket packet = new DatagramPacket(buf, buf.length); 21//接收数据使⽤空的数据包
22                ive(packet);
23//输出信息
24                String info = new Data(), 0, Length());
25                System.out.println("客户端请求:" + info);
26//判断是否退出
27if ("bye".equals(info))
28                {
29break;
30                }
31//发送数据
32                String result = Line();
33byte[] buf2 = Bytes();
34                DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length,
35                        Address(), Port());
36                socket.send(packet2);
37            }
38        } catch (SocketException e)
39        {
40            e.printStackTrace();
41        } catch (IOException e)
42        {
43            e.printStackTrace();
44        } finally
45        {
46//关闭socket
47            socket.close();
48        }
49    }
50 }

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。