java如何实现Socket的长连接和短连接

125 阅读2分钟

在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连接的开启和关闭来实现。短链接在每次数据交换后都会关闭链接,而长链接则会保持开启状态直到明确要求断开。

蓝易云-五网CN2服务器【点我购买】

蓝易云采用KVM高性能架构,稳定可靠,安全无忧!
蓝易云服务器真实CN2回国线路,不伪造,只做高质量海外服务器。


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

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