Java 網絡編程基礎考題
選擇題
1. 以下哪個類是Java中用于創建TCP服務器的核心類?
A. Socket
B. ServerSocket
C. DatagramSocket
D. URLConnection
答案:B
2. UDP協議的特點是什么?
A. 面向連接,可靠傳輸
B. 無連接,不可靠傳輸
C. 面向連接,不可靠傳輸
D. 無連接,可靠傳輸
答案:B
3. 在Java中,以下哪個類用于UDP通信?
A. Socket
B. ServerSocket
C. DatagramSocket
D. HttpURLConnection
答案:C
4. TCP三次握手的正確順序是?
A. SYN → ACK → SYN+ACK
B. SYN → SYN+ACK → ACK
C. ACK → SYN → SYN+ACK
D. SYN+ACK → SYN → ACK
答案:B
5. 以下哪個端口號范圍是系統保留端口?
A. 0-1023
B. 1024-49151
C. 49152-65535
D. 8000-9000
答案:A
填空題
1. Java中創建TCP客戶端連接使用 _______ 類,創建服務器端監聽使用 _______ 類。
答案:Socket, ServerSocket
2. UDP數據傳輸使用 _______ 類封裝數據,通過 _______ 類進行發送和接收。
答案:DatagramPacket, DatagramSocket
3. 網絡編程中,_______ 用于標識網絡中的主機,_______ 用于標識主機上的具體服務。
答案:IP地址, 端口號
4. TCP是 _______ 協議,提供 _______ 的數據傳輸服務。
答案:面向連接, 可靠
5. 在Java網絡編程中,_______ 類可以用來解析URL并建立HTTP連接。
答案:URLConnection
簡答題
1. 簡述TCP和UDP的主要區別。
答案:
- 連接性:TCP是面向連接的,UDP是無連接的
- 可靠性:TCP提供可靠傳輸,UDP不保證數據到達
- 速度:UDP傳輸速度快,TCP相對較慢
- 數據完整性:TCP保證數據完整性和順序,UDP不保證
- 應用場景:TCP適用于文件傳輸、網頁瀏覽等,UDP適用于視頻直播、游戲等
2. 解釋什么是Socket,以及它在網絡編程中的作用。
答案:
Socket是網絡編程中的一個抽象概念,代表網絡通信的端點。它的作用包括:
- 提供應用程序與網絡協議棧的接口
- 封裝了復雜的網絡通信細節
- 支持不同的協議(TCP、UDP等)
- 實現進程間的網絡通信
- 提供數據的發送和接收功能
3. 描述TCP連接建立的三次握手過程。
答案:
- 第一次握手:客戶端發送SYN包到服務器,請求建立連接
- 第二次握手:服務器收到SYN包后,發送SYN+ACK包給客戶端,確認連接請求
- 第三次握手:客戶端收到SYN+ACK包后,發送ACK包給服務器,確認連接建立
連接建立后,雙方可以開始數據傳輸。
編程題
1. 編寫一個簡單的TCP服務器,監聽8080端口,接收客戶端消息并回顯。
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(8080)) {
System.out.println("服務器啟動,監聽端口8080");
while (true) {
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(
new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(
clientSocket.getOutputStream(), true);
String message = in.readLine();
System.out.println("收到消息: " + message);
out.println("回顯: " + message);
clientSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
2. 編寫對應的TCP客戶端,連接上述服務器并發送消息。
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
try (Socket socket = new Socket("localhost", 8080)) {
PrintWriter out = new PrintWriter(
socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
out.println("Hello Server!");
String response = in.readLine();
System.out.println("服務器響應: " + response);
} catch (IOException e) {
e.printStackTrace();
}
}
}
3. 編寫一個UDP服務器,接收客戶端數據包并返回響應。
import java.net.*;
public class UDPServer {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket(9999)) {
System.out.println("UDP服務器啟動,監聽端口9999");
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (true) {
socket.receive(packet);
String message = new String(packet.getData(), 0, packet.getLength());
System.out.println("收到: " + message);
String response = "收到: " + message;
byte[] responseData = response.getBytes();
DatagramPacket responsePacket = new DatagramPacket(
responseData, responseData.length,
packet.getAddress(), packet.getPort());
socket.send(responsePacket);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
4. 編寫對應的UDP客戶端。
import java.net.*;
public class UDPClient {
public static void main(String[] args) {
try (DatagramSocket socket = new DatagramSocket()) {
String message = "Hello UDP Server!";
byte[] data = message.getBytes();
DatagramPacket packet = new DatagramPacket(
data, data.length,
InetAddress.getByName("localhost"), 9999);
socket.send(packet);
byte[] buffer = new byte[1024];
DatagramPacket responsePacket = new DatagramPacket(buffer, buffer.length);
socket.receive(responsePacket);
String response = new String(responsePacket.getData(), 0, responsePacket.getLength());
System.out.println("服務器響應: " + response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
分析題
1. 分析以下代碼的問題并給出改進建議:
public class BadServer {
public static void main(String[] args) throws Exception {
ServerSocket server = new ServerSocket(8080);
Socket client = server.accept();
// 處理客戶端請求
client.close();
server.close();
}
}
問題分析:
- 沒有異常處理機制
- 只能處理一個客戶端連接
- 沒有使用try-with-resources管理資源
- 缺少實際的數據處理邏輯
改進建議:
- 使用try-with-resources確保資源正確關閉
- 添加循環處理多個客戶端
- 添加異常處理
- 考慮使用多線程處理并發連接
浙公網安備 33010602011771號