• Java Socket编程题库


    一、    填空题

    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.

    服务器端口和文件

     

    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编程的主要步骤。

    提示:分别说明服务器端和客户端的编程步骤。

    1. 简述基于UDP的Socket编程的主要步骤。

    提示:分别说明服务器端和客户端的编程步骤。

    五、    编码题

    1. 使用基于TCP的Java Socket编程,完成如下功能:

    1)   要求从客户端录入几个字符,发送到服务器端。

    2)   由服务器端将接收到的字符进行输出。

    3)   服务器端向客户端发出“您的信息已收到”作为响应。

    4)   客户端接收服务器端的响应信息。

    提示:

    服务器端:PrintWriter out =new PrintWriter(socket.getOutputStream(),true);

    客户端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));

     

    服务器端:

     1 public class Server
     2 { // 服务器端类
     3     private ServerSocket ss; // 声明ServerSocket对象
     4     private Socket socket; // 声明Socket对象
     5     private BufferedReader in; // 声明输入流对象BufferedReader
     6     private PrintWriter out; // 声明输出流对象
     7     public Server()
     8     {
     9         try
    10         {
    11             // 创建一个ServerSocket,指定等待端口
    12             ss = new ServerSocket(10000);
    13             while (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 PrintWriter(socket.getOutputStream(), 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     }
    36     public static void main(String[] args)
    37     {// 程序主入口
    38         // 创建对象
    39         new Server();
    40     }
    41 }

    客户端:(3分)

     1 public class Client
     2 { // 声明客户端类
     3     Socket socket; // 声明Socket对象
     4     BufferedReader in; // 声明输入流对象
     5     PrintWriter out; // 声明输出流对象
     6     public Client()
     7     { // 构造方法
     8         try
     9         {
    10             // 创建Socket对象,用来发送请求
    11             socket = new Socket(InetAddress.getLocalHost(), 10000);
    12             // 创建字符缓冲区对象
    13             BufferedReader line = new BufferedReader(new InputStreamReader(
    14                     System.in));
    15             // 创建输出流对象并输出
    16             out = new PrintWriter(socket.getOutputStream(), true);
    17             out.println(line.readLine());
    18             // 创建输入流对象
    19             in = new BufferedReader(new InputStreamReader(socket
    20                     .getInputStream()));
    21             System.out.println(in.readLine());
    22             // 关闭流对象
    23             out.close();
    24             in.close();
    25         } catch (Exception e)
    26         {
    27             e.printStackTrace();
    28             System.out.println("出错了!");
    29         }
    30     }
    31     public static void main(String[] args)
    32     {
    33         // 创建对象
    34         new Client();
    35     }
    36 }

     

    2. 使用基于UDP的Java Socket编程,完成在线咨询功能:

    1)   客户向咨询人员咨询。

    2)   咨询人员给出回答。

    3)   客户和咨询人员可以一直沟通,直到客户发送bye给咨询人员。

     

     1 /**
     2  *
     3  * 在线客服咨询人员
     4  *
     5  */
     6 public class AskServer
     7 {
     8     public static void main(String[] args)
     9     {
    10         //创建DatagramSocket,发送接收数据都依赖他
    11         DatagramSocket socket = null;
    12         try
    13         {
    14             socket = new DatagramSocket(8888);
    15             Scanner input = new Scanner(System.in);
    16             while (true)
    17             {
    18                 //准备一个空的数据包,用来接收数据
    19                 byte[] buf = new byte[1024];
    20                 DatagramPacket packet = new DatagramPacket(buf, buf.length);
    21                 //接收数据使用空的数据包
    22                 socket.receive(packet);
    23                 //输出信息
    24                 String info = new String(packet.getData(), 0, packet.getLength());
    25                 System.out.println("客户端请求:" + info);
    26                 //判断是否退出
    27                 if ("bye".equals(info))
    28                 {
    29                     break;
    30                 }
    31                 //发送数据
    32                 String result = input.nextLine();
    33                 byte[] buf2 = result.getBytes();
    34                 DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length,
    35                         packet.getAddress(), packet.getPort());
    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 }
     1 /**
     2  *
     3  * 在线客服客户
     4  *
     5  */
     6 public class AskClient
     7 {
     8     public static void main(String[] args)
     9     {
    10         //创建DatagramSocket,发送接收数据都依赖他
    11         DatagramSocket socket = null;
    12         try
    13         {
    14             socket = new DatagramSocket(9999);
    15             Scanner input = new Scanner(System.in);
    16             while (true)
    17             {
    18                 //准备要发送的数据
    19                 String str = input.nextLine();//bye
    20                 //使用数据包把数据封装起来
    21                 byte[] buf = str.getBytes();
    22                 DatagramPacket packet = new DatagramPacket(buf, buf.length,
    23                         InetAddress.getByName("192.168.1.252"), 8888);
    24                 //发送数据包
    25                 socket.send(packet);
    26                 //判断是否退出
    27                 if ("bye".equals(str))
    28                 {
    29                     break;
    30                 }
    31                 //接收数据
    32                 byte[] buf2 = new byte[1024];
    33                 DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length);
    34                 socket.receive(packet2);
    35                 System.out.println("服务器端反馈:"
    36                         + new String(packet2.getData(), 0, packet2.getLength()));
    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

    六、    可选题

    1. 使用TCP网络编程完成用户登录功能:客户端输入用户名和密码,向服务器发出登录请求;服务器接收数据并进行判断,如果用户名和密码均是bjsxt,则登录成功,否则登录失败,返回相应响应信息;客户端接收响应信息并输出登录结果。

    1)   用户User类已提供构造方法 public User(String username,String password)。

    2)   客户端采用ObjectOutputStream发送封装了用户名和密码的User对象。

    3)   服务器端和客户端的类名和方法声明如下所示。

    public class LoginServer {

        public static void main(String[] args) throws Exception {}

    }

    public class LoginClient {

        public static void main(String[] args) throws Exception {}

    }

     

     1 public class LoginServer
     2 {
     3     public static void main(String[] args) throws Exception
     4     {
     5         // 1.创建一个ServerSocket,指定等待端口(1分)
     6         ServerSocket serverSocket = new ServerSocket(8888);
     7         // 2.使用ServerSocket接收用户请求(处于监听状态)(1分)
     8         Socket socket = serverSocket.accept();
     9         // 3.创建输入流和输出流(0.5分)
    10         ObjectInputStream ois
    11                 = new ObjectInputStream(socket.getInputStream());
    12         DataOutputStream dos
    13                 = new DataOutputStream(socket.getOutputStream());
    14         // 4.接收用户数据并输出(0.5分)
    15         User user = (User) ois.readObject();
    16         System.out.println("我是服务器,收到的信息是:" + user);
    17         // 5.发送反馈信息(0.5分)
    18         boolean flag = false;
    19         if ("bjsxt".equals(user.getUsername())
    20                 && "bjsxt".equals(user.getPassword()))
    21         {
    22             flag = true;
    23         }
    24         dos.writeBoolean(flag);
    25         // 6.关闭流和socket(0.5分)
    26         ois.close();
    27         dos.close();
    28         socket.close();
    29     }
    30 }
     1 public class LoginClient
     2 {
     3     public static void main(String[] args) throws Exception
     4     {
     5         // 1.创建Socket,用来发送请求(0.5分)
     6         Socket socket
     7                 = new Socket(InetAddress.getByName("127.0.0.1"), 8888);
     8         // 2.创建输入流和输出流(0.5分)
     9         DataInputStream dis
    10                 = new DataInputStream(socket.getInputStream());
    11         ObjectOutputStream oos
    12                 = new ObjectOutputStream(socket.getOutputStream());
    13         // 3.发送数据(1分)
    14         Scanner input = new Scanner(System.in);
    15         System.out.println("请输入用户名");
    16         String username = input.nextLine();
    17         System.out.println("请输入密码");
    18         String password = input.nextLine();
    19         User user = new User(username, password);
    20         oos.writeObject(user);
    21         // 4.接收反馈信息并输出(0.5分)
    22         boolean flag = dis.readBoolean();
    23         if (flag)
    24         {
    25             System.out.println("登录成功");
    26         } else
    27         {
    28             System.out.println("登录失败");
    29         }
    30         // 5.关闭流和socket(0.5分)
    31         dis.close();
    32         oos.close();
    33         socket.close();
    34     }
    35 }
  • 相关阅读:
    eas之排序接口
    eas中删除原来的监听事件添加新的监听事件
    eas之获取单据编码规则
    eas更改用户组织范围和业务组织范围
    ECMAScript 6 文档
    java网络编程介绍
    计算机网络-总结(三)
    Lombok包下常用注解
    计算机网络介绍(二)
    计算机网络介绍(一)
  • 原文地址:https://www.cnblogs.com/guanghe/p/6063259.html
Copyright © 2020-2023  润新知