• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

Bio、Nio、Aio的用法系列之BIO(一)

技术杂谈 勤劳的小蚂蚁 3个月前 (01-20) 72次浏览 已收录 0个评论 扫描二维码

BIO属于同步阻塞式IO

服务端

网络编程的基本模型是从Client/Server模型,就是让两个进城之间进行通信,其中服务端提供服务地址跟端口,客户端根据ip,port进行连接
首先我们先进行服务端代码的编写工作:

publicclassBioServerTest{
   publicstaticvoidmain(String [] args){
       try {
           ServerSocket serverSocket = new ServerSocket(8888);
           while (true){
               Socket socket = serverSocket.accept();
               System.out.println(“接受到来自外星的信号>>>”);
               new Thread(new BioServerHandle(socket)).start();
           }
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

}

上面我们开始监听8888端口,启动这个main后,肯定阻塞到accept,等待客户端发送过来消息

publicclassBioServerHandleimplementsRunnable{
   private Socket socket;

   publicBioServerHandle(Socket socket){
       this.socket = socket;
   }

   @Override
   publicvoidrun(){
       BufferedReader br = null;
       PrintWriter pw = null;
       try {
           br = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
           pw = new PrintWriter(new OutputStreamWriter(this.socket.getOutputStream()),true);
           while (true){
               String body = br.readLine();
               if (body == null){
                   break;
               }
               System.out.print(“the order is “+body);
               String currentTime = “queryTime”.equals(body)? new java.util.Date(System.currentTimeMillis()).toString():“No Query”;
               pw.println(currentTime);
           }
       } catch (IOException e) {
           try {
               br.close();
               pw.close();
               socket.close();
           }catch (Exception e1){

           }
       }
   }
}

客户端

我们有了服务端提供的ip跟端口,就可以进行通信了,下面直接贴代码

publicclassBioClient{
   publicstaticvoidmain(String [] args){
       BufferedReader br = null;
       PrintWriter pw = null;
       try {
           Socket socket = new Socket(“127.0.0.1”,8888);
           br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
           pw = new PrintWriter(socket.getOutputStream(),true);
           pw.println(“queryTime”);
           System.out.println(“发送了一个查询时间的命令过去”);
           String result = br.readLine();
           System.out.print(result);
       } catch (IOException e) {
           e.printStackTrace();
       }
   }

}

先启动服务端,进行轮询,阻塞到accept,然后等待客户端的请求

实验结果

服务端结果:
接受到来自外星的信号>>>  
the order is queryTime
客户端结果:
发送了一个查询时间的命令过去  
SatApr 28 10:31:21CST 2018


    丨极客文库, 版权所有丨如未注明 , 均为原创丨
    本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
    转载请注明原文链接:Bio、Nio、Aio的用法系列之BIO(一)
    喜欢 (0)
    [247507792@qq.com]
    分享 (0)
    勤劳的小蚂蚁
    关于作者:
    温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

    您必须 登录 才能发表评论!

    • 精品技术教程
    • 编程资源分享
    • 问答交流社区
    • 极客文库知识库

    客服QQ


    QQ:2248886839


    工作时间:09:00-23:00