client端
/**
*
*/
package com.client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketTimeoutException;
import org.apache.log4j.Logger;
/**
* socket 长连接客户端
* @author lizt
* @version 1.0.0
*/
public class ClientSocket {
private Logger logger = Logger.getLogger(ClientSocket.class);
private String ip = "131.1.2.14";
private int port = 9090;
private Socket client = null;
private Integer sotimeout = 10 * 1000;// 超时时间,以毫秒为单位
private Integer sleeptime = 5 * 1000;
private void conncet() {
do {
try {
client = new Socket(ip, port);
client.setKeepAlive(true);// 开启保持活动状态的套接字
client.setTcpNoDelay(true);
client.setSoTimeout(sotimeout);// 设置超时时间
logger.info("*** " + client);
sendData();
} catch (java.net.ConnectException e) {
logger.error(e.getMessage());
} catch (SocketTimeoutException e) {
logger.error(e.getMessage());
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
if(client != null)
try {
client.close();
} catch (IOException e) {
}
}
try {
Thread.sleep(3 * 1000);
} catch (InterruptedException e) {
}
} while (true);
}
private void sendData() throws IOException, InterruptedException {
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
do {
long stime = System.currentTimeMillis();
String request = Long.toString(stime);
out.println(request);
out.flush();
logger.info("client >>> " + request);
String response = in.readLine();
logger.info("client <<< " + response + " " + (System.currentTimeMillis() - stime) + "ms");
if(response == null)
throw new IOException("socket is closed.");
Thread.sleep(sleeptime);
} while (true);
}
public static void main(String[] args) {
ClientSocket clientSocket = new ClientSocket();
clientSocket.conncet();
}
}
server端
package com.server;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import org.apache.log4j.Logger;
/**
* socket 长连接服务端
* @author lizt
* @version 1.0.0
*/
public class ServerSocket implements Runnable {
private static final int timeout = 10 * 1000;
private Logger logger = Logger.getLogger(ServerSocket.class);
private String returnStr = "|00";
private java.net.ServerSocket server;
public void run() {
logger.info("server java socket start to accept...");
try {
server = new java.net.ServerSocket(9090,1);
} catch (IOException e) {
logger.error(e.getMessage(), e);
System.exit(-1);
}
do {
try {
accept();
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
} while (true);
}
private void accept() throws IOException {
Socket client = server.accept();
client.setKeepAlive(true);
client.setSoTimeout(timeout);
logger.info(client);
BufferedReader in = null;
BufferedWriter out = null;
try {
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
String line = null;
while((line = in.readLine()) != null) {
logger.info("server accept datas <<< : " + line);
out.write(line + returnStr);
out.newLine();
out.flush();
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
if(in != null)
try {
in.close();
} catch (IOException e2) {
}
if(out != null)
try {
out.close();
} catch (IOException e2) {
}
try {
client.close();
} catch (IOException e2) {
}
}
}
public static void main(String[] args) {
Thread t = new Thread(new ServerSocket());
t.start();
}
}