網絡編程作業 一、 填空題


網絡編程作業

一、    填空題

  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協議的聯系和區別?

    TCP/IP雖然名字是TCP,但是他的傳輸層包含TCP和UDP兩個協議

    TCP是Tranfer ControlProtocol的簡稱,是一種面向連接的保證可靠傳輸的協議。

    UDP是UserDatagram Protocol的簡稱,是一種無連接的協議,每個數據報都是一個獨立的信息

  TCP

    優點:1、面向連接的傳輸;2、數據傳輸穩定可靠;3、端到端的通信;4、全雙工方式;5、以字節為單位傳輸

    缺點:傳輸速度不夠快

  UDP

    優點:1、傳輸速度快;2、效率高;

    缺點:數據包可能會丟失

 

  1. 簡述基於TCP的Socket編程的主要步驟。

    提示:分別說明服務器端和客戶端的編程步驟。

    在Socket的程序開發中,服務器端使用ServerSocket等待客戶端的連接,對於java的網絡程序來講,每一個客戶端都使用一個Socket對象表示。

    socket通訊流程:
    (1)創建Socket(客戶端) ServerSocket(服務端)
    (2)客戶端/服務端打開並連接Socket的輸入/輸出流
    (3)按照一定的規則進行讀/寫操作
    (4)關閉Socket相關

 

  1. 簡述基於UDP的Socket編程的主要步驟。

    提示:分別說明服務器端和客戶端的編程步驟。

    實現流程:
    服務器端(server):
    1. 構造DatagramSocket實例,指定本地端口。
    2. 通過DatagramSocket實例的receive方法接收DatagramPacket.DatagramPacket中間就包含了通信的內容。
    3. 通過DatagramSocket的send和receive方法來收和發DatagramPacket.
    客戶端(client):
    1. 構造DatagramSocket實例。
    2.通過DatagramSocket實例的send和receive方法發送DatagramPacket報文。
    3.結束后,調用DatagramSocket的close方法關閉。

  1 一、    編碼題
  2 1.    使用基於TCP的Java Socket編程,完成如下功能:
  3 1)    要求從客戶端錄入幾個字符,發送到服務器端。
  4 2)    由服務器端將接收到的字符進行輸出。
  5 3)    服務器端向客戶端發出“您的信息已收到”作為響應。
  6 4)    客戶端接收服務器端的響應信息。
  7 提示:
  8 服務器端:PrintWriter out =new PrintWriter(socket.getOutputStream(),true);
  9 客戶端:BufferedReader line=new BufferedReader(new InputStreamReader(System.in));
 10 
 11 public class clint_1 {
 12     public static void main(String[] args) throws IOException {
 13         //1.創建客戶端套接字
 14         Socket s = new Socket("localhost",154);
 15         //2.獲取輸出流(包裝)>字符緩沖流>字符轉換輸出流>字符輸出流
 16         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
 17         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
 18         //3.寫入數據
 19         Scanner sc = new Scanner(System.in);
 20         System.out.println("請輸入發送信息:");
 21         bw.write(sc.nextLine());
 22         bw.flush();
 23     
 24         //4.通知服務器,客戶端數據寫入完畢
 25         s.shutdownOutput();
 26         
 27         //5.從服務器獲得響應
 28         String info = br.readLine();
 29         System.out.println(info);
 30         s.close();
 31     }
 32 }
 33 public class Server_1 {
 34     public static void main(String[] args) throws IOException {
 35         //1.創建服務器端的套接字
 36         ServerSocket ss = new ServerSocket(154);
 37         //2.監聽客戶端的套接字
 38         Socket s = ss.accept();
 39         //3.獲取輸入流,獲取輸出流
 40         BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
 41         BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
 42         //4.讀取客戶端數據
 43         System.out.println("--------------");
 44         String info = br.readLine();
 45         System.out.println(info);
 46         
 47         //響應客戶端
 48         bw.write("您的信息已收到");
 49         bw.flush();
 50         //關閉客戶端套接字
 51         s.close();
 52     }
 53 
 54 }
 55 
 56 2.    使用基於UDP的Java Socket編程,完成在線咨詢功能:
 57 1)    客戶向咨詢人員咨詢。
 58 2)    咨詢人員給出回答。
 59 3)    客戶和咨詢人員可以一直溝通,直到客戶發送bye給咨詢人員。
 60 
 61 public static void main(String[] args){
 62         Scanner sc = new Scanner(System.in);
 63         //創建套接字
 64         DatagramSocket ds = null;
 65         try {
 66             ds = new DatagramSocket();
 67             while(true){
 68                 System.out.println("請輸入發送的信息:");
 69                 String info = sc.nextLine();
 70                 byte[] buf ="".getBytes();
 71                 DatagramPacket dp = new DatagramPacket
 72                         (buf, buf.length, InetAddress.getByName("localhost"), 124);
 73                 //發送數據
 74                 ds.send(dp);
 75                 if("bye".equals(info)){
 76                     break;
 77                 }
 78             }
 79         } catch (IOException e) {
 80             e.printStackTrace();
 81         }finally {
 82             //創建數據包
 83             ds.close();
 84         }
 85         
 86     }
 87 public class Server_2 {
 88     public static void main(String[] args) throws IOException {
 89        //創建套接字
 90         DatagramSocket ds = new DatagramSocket(124);
 91         //創建接受數據的空數據包
 92         while(true){
 93             byte [] buf = new byte[1024];
 94             DatagramPacket dp = new DatagramPacket(buf, buf.length);
 95             ds.receive(dp);
 96             //拆分數據包
 97             byte [] by2 =dp.getData();
 98             InetAddress address = dp.getAddress();
 99             String hostName = address.getHostName();
100             //讀取數據
101             String info = new String(by2,0,by2.length);
102             System.out.println("來自*"+"@"+hostName+"*的消息是:"+info);
103         }
104     }
105 }
106 
107 
108 二、    可選題
109 1.    使用TCP網絡編程完成用戶登錄功能:客戶端輸入用戶名和密碼,向服務器發出登錄請求;服務器接收數據並進行判斷,如果用戶名和密碼均是bjsxt,則登錄成功,否則登錄失敗,返回相應響應信息;客戶端接收響應信息並輸出登錄結果。
110 1)    用戶User類已提供構造方法 public User(String username,String password)。
111 2)    客戶端采用ObjectOutputStream發送封裝了用戶名和密碼的User對象。
112 3)    服務器端和客戶端的類名和方法聲明如下所示。
113  import java.io.BufferedReader;
114 import java.io.BufferedWriter;
115 import java.io.IOException;
116 import java.io.InputStreamReader;
117 import java.io.OutputStreamWriter;
118 import java.net.Socket;
119 import java.util.Scanner;
120 public class clint {
121     public static void main(String[] args) throws IOException {
122      Socket s = new Socket("localhost", 110);
123      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
124      BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
125      Scanner sc=  new Scanner(System.in);
126      System.out.println("輸入用戶名:");
127      String user = sc.nextLine();
128      bw.write(user);
129      bw.flush();
130      bw.newLine();
131      System.out.println("輸入用戶密碼:");
132      String password = sc.nextLine();
133      bw.write(password);
134      bw.flush();
135      
136      s.shutdownOutput();
137      
138      String info = br.readLine();
139      System.out.println(info);
140      
141      s.close();
142     }
143 }
144 
145 import java.io.BufferedReader;
146 import java.io.BufferedWriter;
147 import java.io.FileInputStream;
148 import java.io.IOException;
149 import java.io.InputStreamReader;
150 import java.io.OutputStreamWriter;
151 import java.net.ServerSocket;
152 import java.net.Socket;
153 import java.util.HashMap;
154 import java.util.Map;
155 import java.util.Properties;
156 
157 
158 public class server {
159     public static Map<String, String> getinfo() throws  IOException{
160         Properties p = new Properties();
161         p.load(new FileInputStream("User.properties"));
162         String user = p.getProperty("username");
163         String pwd = p.getProperty("pwd");
164         
165         Map<String, String> map = new HashMap<>();
166         map.put("username", user);
167         map.put("pwd", pwd);
168         return map;
169     }
170     
171     public static void main(String[] args) throws IOException {
172       ServerSocket ss = new ServerSocket(110);
173       Socket s = ss.accept();
174       BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
175       BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
176       String user = br.readLine();
177       String pwd = br.readLine();
178       
179       Map<String, String> map = getinfo();
180       if(map.get("username").equals(user)&&map.get("pwd").equals(pwd)){
181           System.out.println("登錄成功!");
182           bw.write("登錄成功!");
183           bw.flush();
184       }else{
185           System.out.println("登錄失敗!");
186           bw.write("登錄失敗");
187           bw.flush();
188       }
189       s.close();
190       
191     }
192 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM