EchoServer.java代码如下:
package com.network.test; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * 本例子是由服务器程序与客户端程序组成 * 服务器程序一直监听本地8000端口,客户程序连接上本地8000端口, * 客户端向socket里面发送数据,并读取服务端返回的数据 * 服务端读取socket里面的数据,并将数据处理后写入socket里面 * @author yangjianzhou * */ public class EchoServer { public static void main(String[] args) throws Exception{ new EchoServer().service(); } private int port = 8000; private ServerSocket serverSocket; public EchoServer()throws Exception{ serverSocket = new ServerSocket(port); System.out.println("服务器启动!"); } public String echo(String msg){ return "echo : "+msg; } private PrintWriter getWriter(Socket socket) throws Exception{ OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut,true); } private BufferedReader getReader(Socket socket)throws Exception{ InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } public void service(){ while(true){ Socket socket = null; try{ socket = serverSocket.accept(); System.out.println("New connection accepted "+socket.getInetAddress()+":"+socket.getPort()); BufferedReader br = getReader(socket); PrintWriter pw = getWriter(socket); String msg = null; while((msg=br.readLine())!=null){ System.out.println(msg); pw.println(echo(msg)); if(msg.equals("bye")){ break; } } }catch (Exception e) { e.printStackTrace(); }finally{ try{ if(socket!=null) socket.close(); }catch (Exception e) { e.printStackTrace(); } } } } }
客户端程序:
EchoClient.java代码如下:
package com.network.test; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintWriter; import java.net.Socket; public class EchoClient { private String host = "localhost"; private int port = 8000; private Socket socket; public static void main(String[] args) throws Exception{ new EchoClient().talk(); } public EchoClient() throws Exception{ socket = new Socket(host,port); } private PrintWriter getWriter(Socket socket) throws Exception{ OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut,true); } private BufferedReader getReader(Socket socket)throws Exception{ InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } public void talk() throws Exception{ try{ BufferedReader br = getReader(socket); PrintWriter pw = getWriter(socket); BufferedReader localReader = new BufferedReader(new InputStreamReader(System.in)); String msg = null; while((msg = localReader.readLine())!=null){ pw.println(msg); System.out.println(br.readLine()); if(msg.equals("bye")){ break; } } }catch (Exception e) { e.printStackTrace(); }finally{ try{ if(socket!=null){ socket.close(); } }catch (Exception e) { e.printStackTrace(); } } } }
运行结果如下:
服务器端:
服务器启动! New connection accepted /127.0.0.1:55726 yangjianzhou bye
客户端:
yangjianzhou echo : yangjianzhou bye echo : bye