在Java中,使用Socket進行通信主要涉及到兩個類:java.net.Socket
(用于客戶端)和java.net.ServerSocket
(用于服務器端)。下面是一個簡單的示例,展示了如何使用這兩個類實現基本的TCP通信。
1. 服務器端
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
// 創建一個ServerSocket對象,監聽指定端口
ServerSocket serverSocket = new ServerSocket(8888);
System.out.println("Server is listening on port 8888...");
// 接受來自客戶端的連接
Socket socket = serverSocket.accept();
System.out.println("Client connected.");
// 獲取輸入輸出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 讀取客戶端發送的數據
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message = reader.readLine();
System.out.println("Received from client: " + message);
// 向客戶端發送數據
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello from server!");
// 關閉資源
reader.close();
writer.close();
socket.close();
serverSocket.close();
}
}
2. 客戶端
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
// 創建一個Socket對象,連接到服務器的IP地址和端口
Socket socket = new Socket("localhost", 8888);
System.out.println("Connected to server.");
// 獲取輸入輸出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 向服務器發送數據
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello from client!");
// 讀取服務器發送的數據
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message = reader.readLine();
System.out.println("Received from server: " + message);
// 關閉資源
reader.close();
writer.close();
socket.close();
}
}
在這個示例中,服務器監聽8888端口,并在接受到客戶端連接后,通過輸入輸出流與客戶端進行通信。客戶端連接到服務器的IP地址和端口,然后通過輸入輸出流與服務器進行通信。
注意:在實際應用中,你可能需要處理更多的異常情況,例如連接超時、網絡中斷等。此外,為了提高程序的健壯性,你還可以考慮使用多線程來處理多個客戶端的連接。