java-JAVA NIO双向通信问题

问题描述

JAVA NIO双向通信问题
我想要是使用JAVA NIO做一个客户端、服务器**双向通讯**的东东,但是我遇到的问题是:

服务器无法想客户端发送消息,类似这样的方式并不是我想要的:

 while(it.hasNext()) {                      SelectionKey key = it.next();                      if(key.isAcceptable()) {                          log.info(""Server: SelectionKey is acceptable."");                          handler.handleAccept(key);                      } else if(key.isReadable()) {                          log.info(""Server: SelectionKey is readable."");                          handler.handleRead(key);                      } else if(key.isWritable()) {                          log.info(""Server: SelectionKey is writable."");                          handler.handleWrite(key);                      }                      it.remove();  

我的数据是从前台产生的,**数据产生的时间比较随机**,因此并不能像上述一下作为反馈信息发送回去,那么这种情况该怎么解决呢?

我真的没有C币啊,求懂的人帮下忙啦~~~~

解决方案

服务器是不能主动发送消息到客户端的。
只能是客户端没隔一段时间,比如1s,就请求一次服务器,获取服务器的消息,服务器才能和客户端通信。
或者 客户端和服务器一直保持sockeet连接,建立心跳。

解决方案二:
有多种模式 ,建议直接使用Mina框架。
如最经常用的,在会话打开后SessionOpen时新建一个独立线程,定时向客户端发送数据。

时间: 2024-11-05 16:39:49

java-JAVA NIO双向通信问题的相关文章

服务器-java 关于NIO实现UDP数据传输问题 ,急谢谢,C币不足请不要介意

问题描述 java 关于NIO实现UDP数据传输问题 ,急谢谢,C币不足请不要介意 各位大侠好,小弟想问一下问题,搞了一两天没有搞明白的.因为要实现一个UDP传输服务端,于是在网上找了很多资料然后就写了一个.但是写好之后发现有两个很严重的问题,希望各位大哥给点意见或者思路去解决.问题一:启动服务端,同时也启动客户端,客户端传输数据服务器正常接收,但是断开客户端后,再启动客户端,服务器就收不到任何客户端发送的消息,好像是服务器关闭了UDP一样,但是重启服务器后(重新打开UDP)客户端既可以发送信息

java的nio之:java的nio系列教程之概述

一:java的nio的核心组件?Java NIO 由以下几个核心部分组成: ==>Channels ==>Buffers ==>Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API.其它组件,如Pipe和FileLock,只不过是与三个核心组件共同使用的工具类.因此,在概述中我将集中在这三个组件上.其它组 件会在单独的章节中讲到. Channel 和 Buffer 基本上,所有的 IO 在

java的nio之:java的nio系列教程之buffer的概念

一:java的nio的buffer==>Java NIO中的Buffer用于和NIO通道Channel进行交互.==>数据是从通道channel读入缓冲区buffer,从缓冲区buffer写入到通道中channel的.==>缓冲区buffer本质上是一块可以写入数据,然后可以从中读取数据的内存.这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存. 二:buffer的基本用法 ==>使用Buffer读写数据一般遵循以下四个步骤: 写入数据到Buffer

java的nio之:java的nio系列教程之channel的概念

一:java的nio的channel Java NIO的通道类似流,但又有些不同: ==>既可以从通道中读取数据,又可以写数据到通道.但流的读写通常是单向的. ==>通道可以异步地读写. ==>通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入. 正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道.如下图所示: 二:java的nio的channel的实现 这些是Java NIO中最重要的通道的实现: ==>FileChannel  : ==>

python-如何 Python转JAVA java将32x32的二进制图像文本矩阵转换成1x1024的向量

问题描述 如何 Python转JAVA java将32x32的二进制图像文本矩阵转换成1x1024的向量 1C #文本向量化 32x32 -> 1x1024def img2vector(filename): returnVect = [] fr = open(filename) for i in range(32): lineStr = fr.readline() for j in range(32): returnVect.append(int(lineStr[j])) return retu

java的nio的使用示例分享_java

Java NIO(New Input/Output)--新的输入/输出API包--是2002年引入到J2SE 1.4里的.Java NIO的目标是提高Java平台上的I/O密集型任务的性能.过了十年,很多Java开发者还是不知道怎么充分利用NIO,更少的人知道在Java SE 7里引入了更新的输入/输出 API(NIO.2).NIO和NIO.2对于Java平台最大的贡献是提高了Java应用开发中的一个核心组件的性能:输入/输出处理.不过这两个包都不是很好用,并且它们也不是适用于所有的场景.如果能

Java中NIO和IO的比较

NIO是为了弥补IO操作的不足而诞生的,NIO的一些新特性有:非阻塞I/O,选择器,缓冲以及管道.管道(Channel),缓冲(Buffer) ,选择器( Selector)是其主要特征. 概念解释: Channel--管道实际上就像传统IO中的流,到任何目的地(或来自任何地方)的所有数据都必须通过一个 Channel 对象.一个 Buffer 实质上是一个容器对象. 每一种基本 Java 类型都有一种缓冲区类型: ByteBuffer--byte CharBuffer--char ShortB

java中nio的socket通信实例程序

虽然Java平台有不少相当不错的一步socket的框架,比如Netty,naga等,但是我们应该知其然并知其所以然. nio是java New IO 的简称,从jdk1.4里提供的新api,Sun官方标榜的特性如下: 为所有的原始类型提供 (Buffer) 缓存支持 字符集编码解码解决方案 Channel:一个新的原始 I/O 抽象 支持锁和内存映射文件的文件访问接口 提供多路 (non-bloking) 非阻塞式的高伸缩性网络 I/O 基本原理 NIO 有一个主要的类Selector,这个类似

Java的NIO以及线程并发

一.NIO的出现 NIO是JDK1.4里面才出现的东东,他给大家带来的最大好处是异步socket.其它file,pipe暂时就不多谈了. 在JDK1.4出现之前,如果你需要编写一个Java服务器,为了实现异步操作,你必须为每个连接请求生成一个Java线程,当连接请求很多时,线程的调度,上下文切换,所付出的代价是非常昂贵,而且由于Java是跨平台的,各个平台对线程的支持并不相同,性能也不相同,因此传统的Java服务器编程架构是低效的且代价贵,dl大侠写了个util.concurrent包后,总算是