原理: Socket是对TCP连接的封装,TCP本身就是支持长连接交互的。 在Socket两端都持有一个输出流、输入流, 保持流不被关闭,且相互监听对方的输出,即实现保持长连接交互数据。
以下为实现代码。
注意两点
1.双方数据是通过流模式传输,多次交互场景下,流模式没办法判断哪里为单次交互的结束,所以手动设定标识 “over”为单次交互的结束。
2.不要关闭流,让其保持连接,推送数据使用flush();
服务端代码
package com.heiniao.springioc.socket;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;
public class Service {
public static void main(String[] args) throws IOException {
ServerSocket server = new ServerSocket(9898);
while(true) {
Socket socket = server.accept();
new Thread(
new Runnable() {
@Override
public void run() {
try {
while(t