前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >socket系列(一)——socket实现推送

socket系列(一)——socket实现推送

作者头像
逝兮诚
发布2019-10-30 13:19:38
8310
发布2019-10-30 13:19:38
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/72689843

Javasocket实现推送

实现

设想:用socket实现服务器与客户端的tcp长连接,保持outputStream、InputStream连接,通过输入输出流实现信息实时推送

代码

代码语言:javascript
复制
public classTestPush {
   
    @SuppressWarnings("resource")
    @Test
    public void pushService() throws IOException {
       ServerSocketserviceSocket= newServerSocket(10888);
       while(true) {
           Socketsocket= serviceSocket.accept();
           InputStreamclientMsgIs= socket.getInputStream();
           StringclientMsg= StreamUtil.inputStreamToString(clientMsgIs, "UTF-8");
           System.out.println(clientMsg);
           socket.shutdownInput();
          
           System.out.println("请输入推送信息:");
           Scannersc = new Scanner(System.in);
           StringpushMsg= sc.nextLine();
          
           OutputStreamserviceOs= socket.getOutputStream();
           BufferedWriterwriter= newBufferedWriter(newOutputStreamWriter(serviceOs));
           while(!"end".equals(pushMsg)) {
              writer.write(pushMsg);
              writer.newLine();
              writer.flush();
              System.out.println("请输入推送信息:");
              sc = new Scanner(System.in);
              pushMsg = sc.nextLine();
           }
           socket.shutdownOutput();
           serviceOs.close();
           socket.close();
       }
    }
   
    @SuppressWarnings("resource")
    @Test
    public void pushClient() throws UnknownHostException,IOException {
       Socketsocket= newSocket("127.0.0.1", 10888);
      
       OutputStreamos = socket.getOutputStream();
       Stringcmsg= "client connect success";
       os.write(cmsg.getBytes("UTF-8"));
       os.flush();                 //这是socket强制发送
       socket.shutdownOutput();
      
       InputStreamserviceMsgIs= socket.getInputStream();
       BufferedReaderreader= newBufferedReader(newInputStreamReader(serviceMsgIs));
       Stringcontent= null;
       while(true) {
           if((content = reader.readLine()) != null) {
               System.out.println(content); 
           }
       }
    }  
}

运行

用junit将两个方法运行一下,效果如下

总结

这只是一个了解原理的demo,有很都多不完善的地方。

注意的是这里只能使用readline()和write.newLine()的原因是客户端InputStream接收到含有换行符的时候,就会把inputStream缓存的数据拿出来,而如果直接使用InputStream.read()话,它只会在连接结束后才把缓存的数据读取出来。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-05-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Javasocket实现推送
    • 实现
      • 运行
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档