本文共 3035 字,大约阅读时间需要 10 分钟。
1.建立EchoServer服务器,监听来自客户的连接
EchoServer.java:
package chapter01;import java.io.*;import java.net.*;public class EchoServer { private int port = 8000; //服务器端口号(IP默认为本地主机IP) private ServerSocket serverSocket; //ServerSocket public EchoServer() throws IOException{ serverSocket = new ServerSocket(port); System.out.println("服务器启动"); } public String echo(String msg){ return "echo" + msg; } /* *分别用PrintWriter和BufferedReader 修饰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 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(IOException e){ e.printStackTrace(); }finally{ try{ if(socket!=null){ socket.close(); } }catch(IOException e){ e.printStackTrace(); } } } } public static void main(String argsp[]) throws IOException{ new EchoServer().service(); }}
2.EchoClient向服务器发出连接
EchoClient.java:
package chapter01;import java.net.*;import java.io.*;public class EchoClient { private String host = "127.0.0.1"; //指定要连接的服务器IP地址 private int port = 8000; //指定要连接的服务器端口号 private Socket socket; public EchoClient() throws IOException{ socket = new Socket(host,port); } public static void main(String[] args) throws IOException { new EchoClient().talk(); } /* *分别用PrintWriter和BufferedReader 修饰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 talk() throws IOException{ 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(IOException e){ e.printStackTrace(); }finally{ try{ socket.close(); }catch(IOException e){ e.printStackTrace(); } } }}测试: