java非阻塞IO通信问题。

cccloveyf 2010-11-17 04:12:50
最近在研究nio,头有点大了。简单的传输已经实现问题不大,复杂点的就蒙了。
大家知道J2ME是没有nio的,我的程序是从手机客户端向服务端传送数据。
数据是有一定格式含义的。J2ME端用的是DataOutputStream向服务端写数据。
服务端用ByteBuffer缓冲接收,如何重新组装并解析成有意义的数据。
麻烦高手给个例子吧。谢谢。
...全文
218 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zerocoolys 2011-04-26
  • 打赏
  • 举报
回复
楼主的客户端发送数据是否是并行的?
你需要考虑如果不同的客户端数据同时到达以后,buffer里的数据需要区别对待。
或者不同的channel过来的数据需要等待完成之后做处理。

个人意见,没有完全明白楼主的意思。
Jlins 2010-11-18
  • 打赏
  • 举报
回复
+[Quote=引用 7 楼 redduke1202 的回复:]
int remaining = buffer.remaining();
if(remaining >= 6 && buffer.getShort(4) + 6 == remaining){
int id = buffer.getInt();
byte[] b = new byte[buffer.getShort()];
buffer.get(b);
Str……
[/Quote]
安心逍遥 2010-11-18
  • 打赏
  • 举报
回复
这方面都不懂,只能帮顶啦。祝楼主好运
houjin_cn 2010-11-18
  • 打赏
  • 举报
回复
1024一个包都装不下, 用1500吧, 一般MTU是1500
cccloveyf 2010-11-18
  • 打赏
  • 举报
回复
问下大家
假设是要提供10万级同时在线的,支持上传文件的服务器。
一般来说ByteBuffer缓冲开辟多大合适?
1024吗。
「已注销」 2010-11-17
  • 打赏
  • 举报
回复
fix:

if(remaining >= 6 && buffer.getShort(4) + 6 <= remaining)
「已注销」 2010-11-17
  • 打赏
  • 举报
回复

int remaining = buffer.remaining();
if(remaining >= 6 && buffer.getShort(4) + 6 == remaining){
int id = buffer.getInt();
byte[] b = new byte[buffer.getShort()];
buffer.get(b);
String s = new String(b,Charset.forName("UTF-8"));

.....
}
majy 2010-11-17
  • 打赏
  • 举报
回复
你可以定义数据的开始和结束符号,这样,一段数据可以分成几次传送。

你可以用ascii的标准定义来做开始和结束符号,0x01表示数据开始,0x00表示结束。
cccloveyf 2010-11-17
  • 打赏
  • 举报
回复
10只是个假设,实际开发中一定会再大点。
但是再大也不能一定保证大过传输过来的数据。

  • 打赏
  • 举报
回复
这 10 个容量的 Buffer 放不下的,把容量放大一些吧。
cccloveyf 2010-11-17
  • 打赏
  • 举报
回复
up。
能给点代码吗?
伪代码也成。
houjin_cn 2010-11-17
  • 打赏
  • 举报
回复
你需要一个缓存, 用于暂存数据, 每次独到的数据都放到缓存中去, 直到得到一个完整结构的数据时就去处理
cccloveyf 2010-11-17
  • 打赏
  • 举报
回复
比如客户端向服务端这样写数据:

SocketConnection sc = (SocketConnection) Connector.open("socket://127.0.0.1:8888");
DataOutputStream dos = new DataOutputStream(sc.openOutputStream());
dos.writeInt(1);
dos.writeUTF("abcdefghijklmnopqrstuvwxyz");
......

服务端的ByteBuffer缓冲区大小又比较小

ByteBuffer buffer = ByteBuffer.allocate(10);

如何组装数据,并且实现类似于DataInputStream类似的功能?

62,615

社区成员

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

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