使用BIO实现一个简单的echo服务器

    一个简单的echo服务器,客户端向服务端发送消息,服务端进行响应,当客户端发送quit字符串时,断开客户端和服务端的连接。

    服务端代码:

public class EchoClient_BIO {
    private Socket socket;

    public static void main(String[] args) {
        new EchoClient_BIO().service();
    }

    public EchoClient_BIO(){
        try {
            System.out.println("正在连接服务器...");
            socket = new Socket("localhost",8777);
            System.out.println("服务器连接成功");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("服务器连接失败");
        }
    }

    private BufferedReader getReader(Socket socket) throws IOException {
        BufferedReader br = new BufferedReader(
                new InputStreamReader(
                        socket.getInputStream(),"UTF-8"));
        return br;
    }

    private PrintWriter getWriter(Socket socket) throws IOException {
        PrintWriter pw= new PrintWriter(
                new OutputStreamWriter(
                        socket.getOutputStream(),"UTF-8"),true);
        return pw;
    }

    public void service(){
        BufferedReader br = null;
        PrintWriter pw = null;
        try {
            br = getReader(socket);
            pw = getWriter(socket);
            Scanner scanner = new Scanner(System.in);
            String sendMessage = null;
            while ((sendMessage = scanner.nextLine()) != null) {
                pw.println(sendMessage);
                System.out.println(br.readLine());
                if (sendMessage.equals("quit"))
                    break;
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                br.close();
                pw.close();
                socket.close();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }
}

    客户端代码:

public class EchoServer_BIO {
    private ServerSocket serverSocket;

    public static void main(String[] args) {
        new EchoServer_BIO().service();
    }

    private EchoServer_BIO(){
        try {
            System.out.println("服务器正在启动");
            serverSocket = new ServerSocket(8777);
            System.out.println("服务器启动成功");
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("服务器启动失败");
        }
    }

    private BufferedReader getReader(Socket socket) throws IOException {
        BufferedReader br = new BufferedReader(
                new InputStreamReader(
                        socket.getInputStream(),"UTF-8"));
        return br;
    }

    private PrintWriter getWriter(Socket socket) throws IOException {
        PrintWriter pw= new PrintWriter(
                new OutputStreamWriter(
                        socket.getOutputStream(),"UTF-8"),true);
        return pw;
    }

    public void service(){
        while (true){
            Socket socket = null;
            BufferedReader br = null;
            PrintWriter pw = null;
            try {
                socket = serverSocket.accept();
                br = getReader(socket);
                pw = getWriter(socket);
                String recMessage = null;
                while ((recMessage = br.readLine()) != null){
                    System.out.println(recMessage);
                    if (recMessage.equals("quit")){
                        pw.println("bye");
                        break;
                    }else
                        pw.println("I am fine");
                }
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                if (socket!=null){
                    try {
                        socket.close();
                    }catch (Exception e){
                        e.printStackTrace();
                    }
                }
            }
        }
    }
}
    因为很简单,就不说什么了。

猜你喜欢

转载自blog.csdn.net/yanghan1222/article/details/80461618
今日推荐