Java Socket編程題庫

1、    填空題編程

  1.  ___ IP地址____用來標誌網絡中的一個通訊實體的地址。通訊實體能夠是計算機,路由器等。
  2. 統一資源定位符URL是指向互聯網「資源」的指針,由4部分組成:協議、存放資源的主機域名、__端口___和資源路徑和文件名。
  3.    URL  是統一資源定位器的簡稱,它表示Internet上某一資源的地址。
  4. 在Socket編程中,IP地址用來標誌一臺計算機,可是一臺計算機上可能提供多種應用程序,使用  端口    來區分這些應用程序。
  5. 在Java Socket網絡編程中,開發基於TCP協議的服務器端程序使用的套接字是     ServerSocket 
  6. 在Java Socket網絡編程中,開發基於UDP協議的程序使用的套接字是   DatagramSocket 

 

2、    選擇題服務器

1.網絡

如下協議都屬於TCP/IP協議棧,其中位於傳輸層的協議是(  AD  )。(選擇二項)socket

 

 

 

 

A編碼

TCPspa

 

B.指針

HTTPcode

 

C.server

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

 

3、    判斷題

  1. Socket是傳輸層供給應用層的編程接口,是應用層與傳輸層之間的橋樑 。(  T  )
  2. TCP/IP傳輸控制協議是Internet的主要協議,定義了計算機和外設進行通訊的規則。TCP/IP網絡參考模型包括七個層次:應用層、會話層、表示層、傳輸層、網絡層、鏈路層和物理層。(  F  )
  3. TCP協議一種面向鏈接的、可靠的、基於字節流的通訊協議 。HTTP、FTP、TELNET、SMTP 都是基於TCP協議的應用層協議。(  T  )
  4. UDP協議是一種面向無鏈接的、可靠的、基於字節流的傳輸層通訊協議,該協議佔用系統資源多、效率較低。(  F  )

 

4、    簡答題

  1. TCP/IP協議棧中,TCP協議和UDP協議的聯繫和區別?
  2. 簡述基於TCP的Socket編程的主要步驟。

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

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

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

5、    編碼題

  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

6、    可選題

  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 }
相關文章
相關標籤/搜索