要实现客户端与服务器的长连接,可以使用socket的方式连接服务器与客户端。在这篇文章中,将用原生的方式实现socket的服务器端和客户端,然后用Mina框架再实现一次。
原生方式上:
客户端可实现如下:
SocketClient:
package socketClient;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class SocketClient {
public int port = 9898;
public String hostAddress = "127.0.0.1";
public static void main(String[] args) {
SocketClient client = new SocketClient();
client.start();
}
private void start() {
BufferedReader inputReader = null;
OutputStreamWriter output = null;
Socket socket = null;
try {
socket = new Socket(hostAddress, port);
inputReader = new BufferedReader(new InputStreamReader(System.in));
output = new OutputStreamWriter(socket.getOutputStream());
String inputContent;
int count = 0;
while (!(inputContent = inputReader.readLine()).equals("bye")) {
output.write(inputContent);
output.write("\n");
output.flush();
getServerMsg(socket);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
output.close();
inputReader.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private void getServerMsg(Socket socket) {
new Thread(new Runnable() {
@Override
public void run() {
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String serverMsg;
while ((serverMsg = reader.readLine()) != null) {
System.out.println("server say: " + serverMsg);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}).start();
}
}
服务器端:
package com.socket.tra;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
SocketServer server = new SocketServer();
server.startServer();
}
private void startServer() {
ServerSocket serverSocket = null;
Socket socket = null;
try {
serverSocket = new ServerSocket(9898);
while (true) {
socket = serverSocket.accept();
System.out.println(socket.hashCode() + " is connect");
connect(socket);
}
} catch (IOException e) {
e.printStackTrace();
}
}
private void connect(final Socket socket) {
new Thread(new Runnable() {
public void run() {
BufferedReader reader = null;
OutputStreamWriter writer = null;
try {
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
writer = new OutputStreamWriter(socket.getOutputStream());
String msg;
while ((msg = read