在Java中,使用Socket進(jìn)行通信主要涉及到兩個(gè)類:java.net.Socket
(用于客戶端)和java.net.ServerSocket
(用于服務(wù)器端)。下面是一個(gè)簡單的示例,展示了如何使用這兩個(gè)類實(shí)現(xiàn)基本的TCP通信。
1. 服務(wù)器端
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
// 創(chuàng)建一個(gè)ServerSocket對(duì)象,監(jiān)聽指定端口
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();
// 讀取客戶端發(fā)送的數(shù)據(jù)
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message = reader.readLine();
System.out.println("Received from client: " + message);
// 向客戶端發(fā)送數(shù)據(jù)
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello from server!");
// 關(guān)閉資源
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 {
// 創(chuàng)建一個(gè)Socket對(duì)象,連接到服務(wù)器的IP地址和端口
Socket socket = new Socket("localhost", 8888);
System.out.println("Connected to server.");
// 獲取輸入輸出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 向服務(wù)器發(fā)送數(shù)據(jù)
PrintWriter writer = new PrintWriter(outputStream, true);
writer.println("Hello from client!");
// 讀取服務(wù)器發(fā)送的數(shù)據(jù)
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message = reader.readLine();
System.out.println("Received from server: " + message);
// 關(guān)閉資源
reader.close();
writer.close();
socket.close();
}
}
在這個(gè)示例中,服務(wù)器監(jiān)聽8888端口,并在接受到客戶端連接后,通過輸入輸出流與客戶端進(jìn)行通信??蛻舳诉B接到服務(wù)器的IP地址和端口,然后通過輸入輸出流與服務(wù)器進(jìn)行通信。
注意:在實(shí)際應(yīng)用中,你可能需要處理更多的異常情況,例如連接超時(shí)、網(wǎng)絡(luò)中斷等。此外,為了提高程序的健壯性,你還可以考慮使用多線程來處理多個(gè)客戶端的連接。