最近在做Socket长连接,出现了一些问题,没有什么好的思路,希望能够获得解答。

我现在只做BIO,也就是传统IO,阻塞式操作,目的是为了学习。所以没有用NIO,AIO等。

1.客户端开启两个线程,一个监听控制台输入,并在这个线程中再开启另一个线程监听服务端返回的数据

new Thread(new ReadContentTask(bufferedReader)).start();//监听服务端返回数据

bufferedReader = new BufferedReader(new InputStreamReader(System.in));

String content = "";

while (!(content = bufferedReader.readLine()).equals("exit")) {

//增加一个\n,由于服务端读取数据也是使用的readline()方法,该方法只有在识别到\n时会以字符串形式返回这一行的数据

bufferedWriter.write(content + "\n");

bufferedWriter.flush();

}

监听服务端返回数据线程代码:

@Override

public void run() {

try{

String content = "";

while((content = bufferedReader.readLine())!=null){

System.out.println(content);

}

}catch (Exception e){

e.printStackTrace();

}finally {

try{

bufferedReader.close();

}catch (Exception e2){

e2.printStackTrace();

}

}

}

服务端代码:

bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));//读取客户端消息

bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));//向客户端写消息

String lineString = "";

//new Thread(new ReceiveHeart(socket)).start(); //开启心跳检测线程

while (!(lineString = bufferedReader.readLine()).equals("quit")) {

System.out.println("收到来自客户端的发送的消息是:" + lineString);

bufferedWriter.write("服务器返回:" + lineString + "\n");

bufferedWriter.flush();

}

现在的问题是我想做心跳包,该如何设计?

我的想法是比如说客户端再开启一个线程,每隔30秒发送一个为"x"的字节数组给服务端,服务端接收到之后也返回一个个"x"给客户端,并重置心跳时间。如果客户端在一定时间内没收到服务端返回的数据,则判断心跳断开,开启新的线程重连。

我现在做的设计是客户端发送一个字节的数据给服务端,同时客户端在控制台写的数据也发送给服务端,两者走的是同一个socket的inputstream,服务端如何区分收到的消息是心跳消息还是正常消息?

java nio 心跳包_请问Java中Socket的心跳包如何实现?相关推荐

  1. java反射的优化_请问Java反射的性能为什么比直接调用慢一个数量级左右?

    Method.invoke()本身要用数组包装参数:而且每次调用都必须检查方法的可见性(在Method.invoke()里),也必须检查每个实际参数与形式参数的类型匹配性(在NativeMethodA ...

  2. java怎么计算时间差_请问java怎么计算时间差

    比如:现在是2004-03-26 13:31:40 过去是:2004-01-02 11:30:24 我现在要获得两个日期差,差的形式为:XX天XX小时XX分XX秒 方法一: DateFormat df ...

  3. java 预览打印_请问JAVA如何实现打印及打印预览功能?

    展开全部 package com.szallcom.tools; import java.awt.BorderLayout; import java.awt.Color; import java.aw ...

  4. 并发型服务器响应方式,Java NIO 在并发型服务器设计中的应用.pdf

    Java NIO 在并发型服务器设计中的应用 丁辉 北京邮电大学PCN&CAD 中心,北京(100876 ) E-mail :lvsehaier@ 摘 要:本文分析了应用传统阻塞型网络I/O ...

  5. java.lang.IllegalArgumentException: 字符[_]在域名中永远无效。 at

    [http-nio-8080-exec-1] org.apache.coyote.AbstractProcessor.parseHost [xxx_tomcat] 是无效主机注意:更多的请求解析错误将 ...

  6. java修炼之道_《Java程序员修炼之道》

    第2章 新I/O 本章内容: --新I/O API(NIO.2) --Path:基于文件和目录的I/O新基础 --Files应用类和各种辅助方法 --如何实现常见的I/O应用场景 --介绍异步I/O ...

  7. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  8. hadoop jar包_计算机毕业设计中hadoop上运行Java程序

    点击上方"蓝字",关注我们. 第一种:原生态运行jar包 1,利用eclipse编写Map-Reduce方法,一般引入Hadoop-core-1.1.2.jar.注意这里eclip ...

  9. Java NIO学习系列六:Java中的IO模型

    前文中我们总结了linux系统中的5中IO模型,并且着重介绍了其中的4种IO模型: 阻塞I/O(blocking IO) 非阻塞I/O(nonblocking IO) I/O多路复用(IO multi ...

  10. java socket 回调函数_请问Java网络编程如何在不使用多线程的情况下实现异步返回?...

    我指的是在不使用多线程的情况下进行并发处理 具体的情况是,在不使用多线程的情况下,服务器侦听某个端口,在有连接进来的时候会调用某个函数对此连接进行处理,但是由于处理的过程可能会比较长,为了不让后面连接 ...

最新文章

  1. godaddy域名转发(域名跳转)设置教程
  2. php函数有哪三种,【后端开发】php函数可以分为哪三种
  3. 关于yum安装后提示There are no enabled repos Run yum repolist all..的问题解决
  4. javascript基础 (2)
  5. 0.0.5、Linux命令
  6. Android开发学习之路-环境搭建
  7. c++容器定义、初始化、赋值
  8. bzoj3144: [Hnoi2013]切糕(最小割)
  9. MINIGUI交叉编译【转】
  10. Python爬虫编程实践 Task03
  11. 当你不能回答别人的提问时怎么办
  12. 【电路仿真】基于matlab Simulink红绿灯车辆数量识别【含Matlab源码 378期】
  13. 火狐浏览器表单不跳转_火狐浏览器的表单问题,求解_html/css_WEB-ITnose -
  14. win10文件服务器ssd当缓存盘,Win10怎么启用设备上的写入缓存|提高固态硬盘性能方法...
  15. win7电脑设置自动关机
  16. 小sun的假期(贪心+逻辑思维)
  17. 【Java基础系列】基本数据类型及包装类
  18. vue集合离线百度地图
  19. Windows远程控制家里的电脑
  20. 中专学历怎么积分落户北京?

热门文章

  1. 【Python】Json序列化和反序列化模块dumps、loads、dump、load函数介绍
  2. Python图片爬虫
  3. loadrunner要点总结
  4. 在电脑上安装Intel HAXM(硬件加速执行管理器)
  5. 解决weblogic.net.http.SOAPHttpsURLConnection incompatible with javax.net.ssl.HttpsURLConnection
  6. BZOJ_1011_[HNOI2008]_遥远的行星_(近似)
  7. AO如何获取SDE数据库中的数据
  8. 加入商品分类信息,考虑用户所处阶段的 图模型 推荐算法 Rws(random walk with stage)...
  9. 拓端tecdat|R语言用RNN循环神经网络 、LSTM长短期记忆网络实现时间序列长期利率预测
  10. 拓端tecdat|WinBUGS对多元随机波动率模型:贝叶斯估计与模型比较