一,socket编程小例
1,socket编程小例
创建一个EchoServer和一个EchoClient类,EchoServer用于从监听从客户端输入的字符串,当客户端输入"bye"时停止
package com.test.socket; 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 = 8000; private ServerSocket serverSocket; public static void main(String[] args) throws IOException { new EchoServer().service(); } public EchoServer() throws IOException { serverSocket = new ServerSocket(port); System.out.println("服务器启用"); } public String echo(String msg) { return "echo: " + msg; } 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.endsWith("bye")){ break; } } }catch (Exception e) { e.printStackTrace(); }finally{ try{ if(socket != null){ socket.close(); } }catch (Exception e) { e.printStackTrace(); } } } } }
package com.test.socket; 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.Socket; import java.net.UnknownHostException; public class EchoClient { private String host = "localhost"; private int port = 8000; private Socket socket; public EchoClient() throws UnknownHostException, IOException { socket = new Socket(host,port); } public static void main(String[] args) throws UnknownHostException, IOException{ new EchoClient().talk(); } 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 (Exception e) { e.printStackTrace(); }finally{ try{ socket.close(); }catch (Exception e) { e.printStackTrace(); } } } }