1、 填空題編程
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、 判斷題
4、 簡答題
提示:分別說明服務器端和客戶端的編程步驟。
提示:分別說明服務器端和客戶端的編程步驟。
5、 編碼題
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) 用戶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 }