Java实现socket服务端长连接
import java.io.*;
import java.net.Socket;
public class ServerThread extends Thread{
private Socket socket = null;
public ServerThread(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
InputStream is=null;
InputStreamReader isr=null;
BufferedReader br=null;
OutputStream os=null;
PrintWriter pw=null;
try {
is = socket.getInputStream();
isr = new InputStreamReader(is);
br = new BufferedReader(isr);
String info = null;
while((info=br.readLine())!=null){
System.out.println("我是服务器,客户端说:"+info);
}
socket.shutdownInput();
os = socket.getOutputStream();
pw = new PrintWriter(os);
pw.write("服务器欢迎你");
pw.flush();
} catch (Exception e) {
} finally{
SocketUtil.close(br, pw, is, os, socket);
}
}
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class SocketServer {
public static void main(String[] args) {
SocketServer socketServer = new SocketServer();
socketServer.socket();
}
public void socket() {
try {
ServerSocket serverSocket = new ServerSocket(9118);
System.out.println("socket服务端启动......");
Socket socket = new Socket();
while(true){
socket = serverSocket.accept();
ServerThread thread = new ServerThread(socket);
thread.start();
InetAddress address=socket.getInetAddress();
System.out.println("当前客户端的IP:"+address.getHostAddress());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.*;
import java.net.Socket;
public class SocketUtil {
public final static Logger logger = LoggerFactory.getLogger(SocketUtil.class);
public static void close(BufferedReader br, PrintWriter pw, InputStream is, OutputStream os, Socket socket) {
try {
if (null != br) {
br.close();
}
if (null != pw) {
pw.close();
}
if (null != is) {
is.close();
}
if (null != os) {
os.close();
}
if (null != socket) {
socket.close();
}
} catch (IOException e) {
logger.error("IOException", e);
}
}
}