JAVA 可否让一个已连接的tcp,随时都能发送数据

qq_24103813 2015-08-07 07:59:32
本人小白,可能表述不清。
就是我已经跟服务器建立了一个TCP连接,这连接是不断开的。例如我是在吃饭前建立的连接,吃饭后我想起了一些事情,就想告诉服务器。这个事情是有随机性的,事情内容也是随机性的。不是那种有规律的(有规律的就不用向各位大神问了)。
现在我不想再创建另外的一个TCP连接,就想使用先前的那个连接发送这个事件内容。
不知道这样可不可行。
本人想到的是一个比较笨的方法:两个全局变量:一个是boolean类型的变量OK,初始值为false。一个是byte[]类型data,初始值为空。当想要发送数据的时候,就向data中写入数据。

而在TCP连接建立之后加入while循环
while(true){
if(OK == true)
dout.write(data);
OK = false;
data=null;
}
PS:dout是DataOutputStream

只要我想发送数据,就向data写入数据,然后设置OK为true,这样他不就能随时发了吗?
请问各位老鸟这样做对不对?问题是有的,总觉得是有问题。因为正在忙其他的东西,硬件也不允许。没有测试,求解?
...全文
449 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
三仙半 2015-08-17
  • 打赏
  • 举报
回复
引用 7 楼 xiaopeng187 的回复:
其实你就是想做个推送功能,为啥要说的那么复杂!
你觉得楼主要做的这是推送吗?
去旅行吧 2015-08-13
  • 打赏
  • 举报
回复
其实你就是想做个推送功能,为啥要说的那么复杂!
GeekQing 2015-08-12
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
你的这个设计真的有点糟糕,为啥要设计这样一个while循环,毫无意义啊。 你的意思是设置一个缓冲区,写数据的时候只是写入缓冲区,而后设计一个线程一直扫描缓冲区,如果缓冲区中有数据就写入网络对端,实际上为什么不在需要写数据的时候直接调用dout.write(data);呢?
问个问题,如果是大并发的写呢?
rumlee 2015-08-12
  • 打赏
  • 举报
回复
引用 5 楼 zhuxiaqing 的回复:
[quote=引用 1 楼 rumlee 的回复:] 你的这个设计真的有点糟糕,为啥要设计这样一个while循环,毫无意义啊。 你的意思是设置一个缓冲区,写数据的时候只是写入缓冲区,而后设计一个线程一直扫描缓冲区,如果缓冲区中有数据就写入网络对端,实际上为什么不在需要写数据的时候直接调用dout.write(data);呢?
问个问题,如果是大并发的写呢?[/quote] 大并发用nio/aio,找个框架(mina、netty之类),比你自己写的好多了。
-天宇 2015-08-10
  • 打赏
  • 举报
回复
这就是TCP长连接做的事啊,java 基础一定要扎实
sssskd 2015-08-10
  • 打赏
  • 举报
回复
引用 1 楼 rumlee 的回复:
你的这个设计真的有点糟糕,为啥要设计这样一个while循环,毫无意义啊。 你的意思是设置一个缓冲区,写数据的时候只是写入缓冲区,而后设计一个线程一直扫描缓冲区,如果缓冲区中有数据就写入网络对端,实际上为什么不在需要写数据的时候直接调用dout.write(data);呢?
顶这个
三仙半 2015-08-09
  • 打赏
  • 举报
回复
同意楼上的观点,想发送时,调用write()方法,然后调用flush()方法。
rumlee 2015-08-08
  • 打赏
  • 举报
回复
你的这个设计真的有点糟糕,为啥要设计这样一个while循环,毫无意义啊。 你的意思是设置一个缓冲区,写数据的时候只是写入缓冲区,而后设计一个线程一直扫描缓冲区,如果缓冲区中有数据就写入网络对端,实际上为什么不在需要写数据的时候直接调用dout.write(data);呢?

62,630

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧