在Java中,使用Socket進行長連接主要依賴于TCP協議的特性。TCP協議本身就是一個面向連接的、可靠的、基于字節流的傳輸層通信協議,它能夠保證數據的穩定傳輸。因此,在使用Java Socket進行長連接時,只要保持Socket對象不被關閉,就可以實現長連接。
以下是一個簡單的示例,展示了如何使用Java Socket實現長連接:
import java.io.*;
import java.net.*;
public class LongConnectionServer {
public static void main(String[] args) throws IOException {
int port = 12345;
ServerSocket serverSocket = new ServerSocket(port);
System.out.println("Server started, waiting for client connection...");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("Client connected: " + socket.getInetAddress() + ":" + socket.getPort());
// 獲取輸入輸出流
InputStream inputStream = socket.getInputStream();
OutputStream outputStream = socket.getOutputStream();
// 處理客戶端請求(這里只是簡單地讀取客戶端發送的數據)
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message;
while ((message = reader.readLine()) != null) {
System.out.println("Received from client: " + message);
// 向客戶端發送響應
outputStream.write("Server response: " + message.toUpperCase().getBytes());
outputStream.flush();
}
// 關閉資源
reader.close();
outputStream.close();
socket.close();
System.out.println("Client disconnected: " + socket.getInetAddress() + ":" + socket.getPort());
}
}
}
在這個示例中,服務器會一直監聽指定端口上的客戶端連接。當客戶端連接成功后,服務器會與客戶端進行長連接通信,直到客戶端主動關閉連接。在通信過程中,服務器會讀取客戶端發送的數據,并向客戶端發送響應。