• 第 8 章 Java的网络程序设计答案


    一.选择题

    1.D  2.B  3.C  4.B  5.C  6.D  7.A  8.C  9.D 10.B 11.A  12.A  13.B  14.A  15.B 16.D 

    二.填空题

    1. InetAddress        2. ServerSocket类 , Socket类。              3. MulticastSocket         4. TCP协议 , UDP协议 , 网络游戏 ,视频会议            5. openStream() InputStream openStream()            6. MalformedURLException try-catch语句              7.套接字 ,IP地址, 端口 

    三. 简答题

    1. 套接口(Socket),是传送层提供的网络进程通信接口。通讯的主动方是顾客,它利用Socket,向服务器(接收方)发送请求,服务器接收顾客请求,返回服务结果。进程之间想通信首先要建立各自的套接口。端口同一台网络计算机的一个特定进程关联,与进程建立的套接口绑定在一起。客户程序必须事先知道自己要求的那个服务进程的壹IP地址和端口号。程序员在创建自己的应用服务程序时一般自己指定一个端口号,也可以由系统分配一个端口号。客户通过这个端口号连接该服务进程。客户端应用进程象服务进程一样,也有自己的端口号,通过该端口客户端应用进程与服务进程通信。

    2.  TCP(Transport Control Protocol)传输控制协议是面向连接的、可靠的点对点的连接的协议。

        

     

    TCP是一种可靠的、基于连接的网络传输协议,当两个网络进程准备进行通信时,都必须首先建立各自的一个套接口,其中服务器建立套接口后,侦听来自网络的客户连接请求,客户通过套接口,指定服务器的IP 地址和端口号,便可与服务器通信。

    服务程序运行在服务器主机的某个端口上,一旦启动服务,它将在这个端口上倾听,等待客户程序发来的请求。服务器的套接口用服务器套接口类(ServerSocket)来建立。方法accept() 使服务者等待,直到有客户连接到该端口。一旦有客户送来正确请求,连接至该端口, accept()方法就返回一个新的套接口对象soc,表示已建立好连接。服务者使用它们从客户接受输入信息和向客户程序发送信息所用,同样,在客户端也应该建立这两个对象,用来与服务程序进行双向通信。服务者向输出流发送的所有信息都成为客户的输入信息,而客户程序的输出都送入服务者的输入流。

    UDP(User Datagram Protocol)用户数据报协议是无连接的传输不可靠的协议。

       

     

    UDP协议把要发送的数据及对方的IP地址、对方端口号构成报文,不与对方连接就把报文一个个独立地地发送出去。UDP协议本身不能保证数据报一定到达目的地,不能保证数据报到达目的地顺序。但是,这种服务的可靠性可以有应用层来实现。

    服务器利用UDP协议实现客户和服务器之间通信,首先建立数据报套接口对象,自己指定一个端口号,也可以由系统自动确定端口号。利用无参的构造方法DatagramSocket()系统自动确定端口号,这时必须利用getLocalPort())方法获取该数据报端口号。这个端口号及服务器的IP地址对客户方发送报文来说是必须知道的。否则,客户方无法发送报文。

    客户方利用UDP协议实现客户和服务器之间通信,首先也要建立数据报套接口对象,一般使用无参的构造方法DatagramSocket(),这时,系统自动确定一个端口号,然后利用发送报文缓冲区、服务器的IP地址及服务器的端口号建立发送数据包DatagramPacket对象。利用建立的数据报套接口发送该DatagramPacket对象。

    3. URL(Uniform Resource Locator)是WWW资源统一资源定位器的简写。它规范了WWW资源网络定位地址的表示方法。一个URL的组成部分有:WWW资源的特征及读其内容的方法。URL的基本表示格式是:protocol://hostname:/resourcename#anchor;其中:protocol(使用的协议):它可以是http、ftp、news、telnet等;hostname(主机名):指定域名服务器(DNS)能访问到的WWW服务的计算机;port(端口号):是可选的,表示所连的端口号,如缺省,将连接到协议缺省的端口;Resourcename(资源名):是主机上能访问到的目录或文件;anchor(标记):也是可选的,它指定文件中的有特定标记的位置。

    4. try{
     Socket socket=new Socket(目标主机,目标端口);    
     }catch(IOException e){
     System.out.println("Error:"+e);
        }
    5. ServerSocket server=null;
      try {
         server=new ServerSocket(监听端口);
       }catch(IOException e){
         System.out.println("can not listen to :"+e);
      }
      Socket socket=null;
      try {
        socket=server.accept();
       }catch(IOException e){
        System.out.println("Error:"+e);
      }
    6.  PrintStream os=new PrintStream(new BufferedOutputStreem(socket.getOutputStream()));
      DataInputStream is=new DataInputStream(socket.getInputStream());
      PrintWriter out=new PrintWriter(socket.getOutStream(),true);
      BufferedReader in=new ButfferedReader(new InputSteramReader(Socket.getInputStream())); 
    7. TCP,可靠,传输大小无限制,但是需要连接建立时间,差错控制开销大。
     UDP,不可靠,差错控制开销较小,传输大小限制在64K以下,不需要建立连接。

    8. DatagramSocket(); DatagramSocket(int prot); DatagramSocket(int port, InetAddress laddr),     port指明socket所使用的端口号,如果未指明端口号,则把socket连接到本地主机上一个可用的端口。laddr指明一个可用的本地地址。

    四.程序设计题

    1. import java.net.*;

    import java.io.*;

     class Ping {

           public static void main(String[] args)

     {   System.out.println("请输入ping主机名称或地址:\n");

     try {

           String host = keyreadline();

      InetAddress ip = InetAddress.getByName(host);

     long t1 = System.currentTimeMillis();

     if(ip.isReachable(5000))

     { long t2 = System.currentTimeMillis();

    System.out.println("\nReply from "  + ip.getHostAddress() + "  time<=" + (t2-t1) + "ms");

    System.out.println();

    }

    else { System.out.println("Request timed out.");

    } }

    catch (IOException e)

     { System.out.println("Request timed out."); }

     }

     private static String keyreadline( ) {

            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

            String str = null;

            try {           

                str = br.readLine();

            } catch (IOException e) {

                e.printStackTrace();        }

            return str;

        }

      }

    2.

    import java.net.*;

    import java.io.*;

      class Server{

     public Server() {

      try  {

       ServerSocket ss = new ServerSocket(8629);

       System.out.println("服务器端已运行,等待客户端连接:");      

        Socket socket = ss.accept();  //接收客户端的连接请求;

      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

        PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String line;  

        while(true)

        {line = (in.readLine().trim()); 

        if(line.equals("BYE"))

        { out.println("BYE");            

          out.close();

          in.close();

           socket.close();

           br.close();

           ss.close();

            break;}       

        System.out.println("客户输入为 :" + line);

        System.out.println("请输入回答:" );

       line=br.readLine();              //从键盘上输入信息;

        out.println(line);        //向对方发送信息

        }       } 

      catch (IOException e){}

     }

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

      new Server();

      }

    }

    3.

    import java.io.*;

    import java.net.*;

      class Client2{

     public Client2()

     {  try

      {String s;

       Socket socket = new Socket("服务器地址", 8629);  

      BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

       PrintWriter out = new PrintWriter(socket.getOutputStream(),true);

       BufferedReader line = new BufferedReader(new InputStreamReader(System.in));

        while(true)

      { System.out.println("请向服务器输出一条字符串:");

        s=line.readLine();

         out.println(s);                 //向服务器发出信息;

         s=in.readLine().trim();               //收到服务器发来的信息;

         System.out.println("服务器返回的信息是:");

          System.out.println(s);

        if(s.equals("BYE"))

        { out.println("BYE");

         

          line.close();

          out.close();

          in.close();

           socket.close();  break;}

        }  

            }

      catch (IOException e){}

     }

     public static void main(String[] args) {

      new Client2();

     }}

  • 相关阅读:
    JVM之Class文件分析详解
    阿里云天池大赛赛题(机器学习)——工业蒸汽量预测(完整代码)
    CUDA编程学习(3)
    Python中的3D矩阵操作
    JVM参数调优
    二茂铁Ferrocene/β-环糊精Cyclodextrin/叶酸FA修饰ZnTe量子点
    【多线程】CAS 详解
    大O的渐近表示法经典题目
    Python正则表达式
    leetcode:1332. 删除回文子序列(python3解法)
  • 原文地址:https://blog.csdn.net/qq_40086702/article/details/125410442