JAVA Socket长连接

mac2024-05-25  36

注:先启动Server端在启动Client端:  SocketClient端:

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class SocketClient { public static void main(String[] args) { SocketClient client=new SocketClient(); client.startAction(); } void readSocketInfo(BufferedReader reader){ new Thread(new MyRuns(reader)).start(); } class MyRuns implements Runnable{ BufferedReader reader; public MyRuns(BufferedReader reader) { super(); this.reader = reader; } public void run() { try { String lineString=""; while( (lineString = reader.readLine())!=null ){ System.out.println(lineString); } } catch (Exception e) { e.printStackTrace(); } } } public void startAction(){ Socket socket=null; BufferedReader reader=null; BufferedWriter writer=null; BufferedReader reader2=null; try { socket=new Socket("127.0.0.1", 10000); reader = new BufferedReader(new InputStreamReader(System.in)); reader2=new BufferedReader(new InputStreamReader(socket.getInputStream())); writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); readSocketInfo(reader2); String lineString=""; while(!(lineString=reader.readLine()).equals("exit")){ writer.write(lineString+"\n"); writer.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (reader!=null) { reader.close(); } if (writer!=null) { writer.close(); } if (socket!=null) { socket.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } }

SocketServer端  

import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class SocketServer { private final static Logger LOGGER = LoggerFactory.getLogger(SocketServer.class); public void startAction(){ ServerSocket serverSocket=null; try { serverSocket=new ServerSocket(10000); //端口号 LOGGER.info("服务端服务启动监听:"); //通过死循环开启长连接,开启线程去处理消息 while(true){ Socket socket=serverSocket.accept(); new Thread(new MyRuns(socket)).start(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (serverSocket!=null) { serverSocket.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } class MyRuns implements Runnable{ Socket socket; BufferedReader reader; BufferedWriter writer; public MyRuns(Socket socket) { super(); this.socket = socket; } public void run() { try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//读取客户端消息 writer=new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//向客户端写消息 String lineString=""; while(!(lineString=reader.readLine()).equals("bye")){ LOGGER.info("收到来自客户端的发送的消息是:" + lineString); writer.write("服务器返回:"+lineString+"\n"); writer.flush(); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (reader!=null) { reader.close(); } if (writer!=null) { writer.close(); } if (socket!=null) { socket.close(); } } catch (Exception e2) { e2.printStackTrace(); } } } } public static void main(String[] args) { SocketServer socketServer = new SocketServer(); socketServer.startAction(); } }

 

最新回复(0)