import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.ServerSocket;import java.net.Socket;public class EchoServer {private int port=8080;private ServerSocket esSocket;private int count=1;public EchoServer() throws IOException{esSocket=new ServerSocket(port);System.out.println("EchoServer 伺服器啟動...");//System.out.println(esSocket.getLocalSocketAddress()+" : "+esSocket.getLocalPort());}public void service(){while(true){Socket socket=null;System.out.println("Server start");try{socket=esSocket.accept();//System.out.println("New connect : "+count);Thread workthread=new Thread( new Handler(socket));workthread.start();}catch(IOException e){e.printStackTrace();}}}public static void main(String[] args) {// TODO Auto-generated method stubtry{new EchoServer().service();}catch(Exception e){e.printStackTrace();}}}class Handler implements Runnable{private Socket socket;String msg=null;public Handler(Socket socket){this.socket=socket;}private PrintWriter getWriter(Socket socket) throws IOException{OutputStream socketOut =socket.getOutputStream();return new PrintWriter(socketOut,true);}private BufferedReader getReader(Socket socket) throws IOException{InputStream socketIn=socket.getInputStream();return new BufferedReader(new InputStreamReader(socketIn));}public void run(){try {System.out.println("New connect : "+socket.getInetAddress()+" : "+socket.getPort());//System.out.println("Local "+socket.getLocalSocketAddress()+" : "+socket.getLocalPort());BufferedReader br=getReader(socket);PrintWriter pw=getWriter(socket);while( (msg=br.readLine()) !=null){System.out.println("receive : "+msg);pw.println("echo :"+msg);if( msg.equals("bye")==true ){System.out.println("======== exit ========");//flag=true;socket.close();break;}}} catch (Exception e) {e.printStackTrace();}finally{try{if(socket !=null){socket.close();}}catch(Exception e){e.printStackTrace();}}}}
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.PrintWriter;import java.net.InetAddress;import java.net.InetSocketAddress;import java.net.Socket;public class EchoClient {private String host="localhost";private String remoteHost="109.130.246.96";private String remoteBaidu="http:\\www.baidu.com";private int port=8080;private Socket ecSocket;private Boolean flag=false;public EchoClient() throws IOException{System.out.println("==== client start ");System.out.println("==== client try to connect server ");ecSocket=new Socket(host,port);}private PrintWriter getWriter(Socket socket)throws IOException{OutputStream socketOut=socket.getOutputStream();return new PrintWriter(socketOut,true);}private BufferedReader getReader(Socket socket)throws IOException{InputStream socketIn =socket.getInputStream();return new BufferedReader(new InputStreamReader(socketIn));}public void talk() throws IOException{String msg=null;while(true){flag=false;try{BufferedReader br=getReader(ecSocket);PrintWriter pw=getWriter(ecSocket);BufferedReader localReader=new BufferedReader(new InputStreamReader(System.in));while( ( msg=localReader.readLine())!=null){System.out.println("send :"+msg);pw.println(msg);System.out.println(br.readLine());if(msg.equals("bye")){flag=true;System.out.println("======== exit ========");break;}}}catch(IOException e ){e.printStackTrace();}finally {try{//if(ecSocket==null)ecSocket.close();}catch(IOException e){e.printStackTrace();}}if(flag)break;}}public static void main(String[] args) {// TODO Auto-generated method stubtry {new EchoClient().talk();} catch (IOException e) {// TODO: handle exceptione.printStackTrace();}}}