在Java中,Socket编程是网络编程的基础,它可以实现客户端和服务器之间的通信。根据连接持续时间和使用方式的不同,Socket连接可以分为长连接和短连接。

首先我们来看看如何实现短连接。在短链接中,客户端向服务器发送请求后就断开了链接。当服务器处理完请求并返回响应后也会断开链接。

以下是一个简单的Java Socket短链接示例:

// 客户端
import java.io.*;
import java.net.*;

public class ShortConnectionClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8080);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        out.println("Hello Server");
    
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String response = in.readLine();
    
        System.out.println("Server response: " + response);

    // 关闭资源
    out.close();
    in.close();
    socket.close(); 
    }
}

// 服务端
import java.io.*;
import java.net.*;

public class ShortConnectionServer {
    public static void main(String[] args) throws IOException {
    ServerSocket serverSocket = new ServerSocket(8080);

    while (true) { 
        Socket clientSocket = serverSocket.accept();

        BufferedReader in =
        new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        String requestMessage= in.readLine();

            System.out.println("Client message: " + requestMessage);

            PrintWriter out =
                new PrintWriter(clientsocket.getOutputStream(), true);
            out.println("Hello Client");

        // 关闭资源
            clientsocket.close();
    }
    serversocket.close(); 
    }
}

然后我们来看看如何实现长连接。在长链接中,客户端和服务器建立连接后,会保持这个链接的开启状态,直到客户端或服务器明确要求断开连接。

以下是一个简单的Java Socket长链接示例:

// 客户端
import java.io.*;
import java.net.*;

public class LongConnectionClient {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("localhost", 8080);
        PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    
    for (int i = 0; i < 5; i++) {
        out.println("Hello Server " + (i + 1));
        BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String response = in.readLine();
            System.out.println("Server response: " + response);
    }

    // 关闭资源
    out.close();
    socket.close(); 
    }
}

//服务端
import java.io.*;
import java.net.*;

public class LongConnectionServer {
    public static void main(String[] args) throws IOException{
    ServerSocket serverSocket=new ServerSocket(8080);

    while(true){
            Socket clientsocket=serverSocket.accept();

            BufferedReader in=new BufferedReader(new InputStreamReader(clientsocket.getInputStream()));
        
            PrintWriter out=new PrintWriter(clientsocket.getOutputStream(),true);

        String requestMessage;
      
            while ((requestMessage= in.readLine()) != null) { 
                System.out.println("Client message: " + requestMessage);
                out.println("Hello Client");
            }

            // 关闭资源
            clientsocket.close();
    }
    serversocket.close(); 
    }
}

在这个例子中,我们可以看到客户端和服务都没有立即关闭套接字。相反,在一个循环中发送和接收多个消息,直到完成所有的交互。

总的来说,长连接和短连接在Java中主要通过控制Socket连接的开启和关闭来实现。短链接在每次数据交换后都会关闭链接,而长链接则会保持开启状态直到明确要求断开。


海外免备案云服务器链接:www.tsyvps.com

蓝易云香港五网CN2 GIA/GT精品网络服务器。拒绝绕路,拒绝不稳定。

蓝易云是一家专注于香港及国内数据中心服务的提供商,提供高质量的服务器租用和云计算服务、包括免备案香港服务器、香港CN2、美国服务器、海外高防服务器、国内高防服务器、香港VPS等。致力于为用户提供稳定,快速的网络连接和优质的客户体验。
最后修改:2023 年 09 月 28 日
如果觉得我的文章对你有用,请随意赞赏