问题描述
最近学习java的nio socket非阻塞模式编程服务器端发送信息格式如下: 8位的头部包含类型和信息的长度 如 LLWH002001234567890123456789,后面的信息中包含gb2312编码的汉字。写客户端的时候碰到个问题:SocketChannel的read(ByteBuffer[] dsts, int offset, int length)方法还没弄清楚怎么使用。服务端发来 LLWH002001234567890123456789 这个消息时,用read(ByteBuffer dst) 这个方法读取到信息经常是分成好多段,怎么才能把全部信息读取到ByteBuffer里头。现在的代码如下: public void Rec() throws IOException { int count; r_buff.clear(); count = sc.read(r_buff); r_buff.flip(); byte[] temp = new byte[r_buff.limit()]; r_buff.get(temp); System.out.println("reply is " + count + " long, and content is: " + new String(temp)); }
解决方案
我怎么觉得应该是发送时出的问题呢……你看一下你是不是分段发送的,我觉得这样接收的话是没问题的,因为我也是这样做的……
解决方案二:
还有可能是你的r_buff不够大……我猜……
时间: 2024-10-30 08:21:04