使用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();
                    }
                }
            }
        }
    }
}
    因为很简单,就不说什么了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值