netty怎么才能一次接收超过1024字节的字符串

dusz 2013-05-03 08:33:09
package com.angogps.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.Executors;

import org.jboss.netty.bootstrap.ServerBootstrap;
import org.jboss.netty.channel.ChannelPipeline;
import org.jboss.netty.channel.ChannelPipelineFactory;
import org.jboss.netty.channel.Channels;
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;

public class MeiTrackSocketServer extends Thread{
public static void main(String[] args) throws IOException {
ServerBootstrap bootstrap = new ServerBootstrap(
new NioServerSocketChannelFactory(
Executors.newCachedThreadPool(),
Executors.newCachedThreadPool()));
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() {
ChannelPipeline pipeline = Channels.pipeline();
pipeline.addLast("handler", new HelloWorldServerHandler());
return pipeline;
}
});
bootstrap.bind(new InetSocketAddress(8080));
}
}

package com.angogps.socket;

import java.nio.charset.Charset;

import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.channel.ChannelHandlerContext;
import org.jboss.netty.channel.MessageEvent;
import org.jboss.netty.channel.SimpleChannelHandler;

public class HelloWorldServerHandler extends SimpleChannelHandler{
public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) {
ChannelBuffer buffer = (ChannelBuffer) e.getMessage();

String string=buffer.toString(Charset.defaultCharset());
System.out.println("全部"+string);
String[] strings=string.split(",");
System.out.println("============"+strings[0]);
System.out.println("---------------"+strings[1]);
}
}


客户端

package com.angogps.socket;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;

public class MeiTrackSocketClient {
static Socket server;

public static void main(String[] args) throws Exception {
server = new Socket(InetAddress.getLocalHost(), 8080);
BufferedReader in = new BufferedReader(new InputStreamReader(
server.getInputStream()));
PrintWriter out = new PrintWriter(server.getOutputStream());
// BufferedReader wt = new BufferedReader(new InputStreamReader(System.in));
//
String str = "1,开三等奖拉克丝就阿斯达阿里斯柯达将阿里三等奖阿隆" +
"索肯德阿克苏进和大款数据还得卡机和sals拉斯柯达将阿拉斯加的拉克丝将德拉科" +
"将山东龙口就阿斯兰大口径阿拉克三等奖阿里斯顿进啦看时间段拉斯克奖的拉斯克奖的拉克丝 " +
" d卡集合sd卡将啊哈sd卡哈萨克的将哈克圣诞卡寄售点卡寄售点卡寄售点卡就 基啊拉斯克" +
"奖得拉看时间段阿拉克三等奖阿里斯顿将阿里看时间段啦三间大流开局拉克丝将大力看时间段" +
"啦看时间段拉克丝就的拉斯克奖大路考手机登陆安静的拉克丝将德拉科将史黛拉看" +
"时间段拉克丝就的拉开三等奖啊拉斯克奖大流口水较大流开局打了斯柯达将阿里看时间段l" +
"askdj啊拉斯柯达将啊拉斯克奖大流口水较拉克将打蜡看时间段拉克丝就德拉科见识到了" +
"卡机是的垃圾算了阿隆索肯德基啊拉斯克奖的拉斯克奖的拉克丝就阿斯兰大口径啊拉斯克奖得拉看" +
"时间段阿斯兰大口径阿斯利康打拉斯克奖的阿斯兰大口径阿斯兰肯德基阿斯利康大劫案拉卡机死得啦" +
"可接受的拉克丝将打蜡看时间段拉克丝就的拉斯克奖得拉看时间段拉斯科阿雷克斯较大拉克丝较大拉斯" +
"克奖达拉斯肯德基啊拉斯克奖打拉斯克奖达拉斯科技大拉斯克奖的阿雷克斯较大拉克丝将大力快睡觉大立科技" +
"萨拉肯德基啊拉斯克奖打拉斯克奖大路考大";
out.println(str);
out.flush();
System.out.println(in.readLine());
server.close();
}
}

发送这个长度的时候数据就分开接收了 如何设置才能让他一次接收完毕再做处理
...全文
1964 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
http://blog.csdn.net/mcpang/article/details/38613857 你看看这个有没有帮助,我看完了就解决了问题了。
凛冽北风 2014-09-11
  • 打赏
  • 举报
回复
不知道你的问题解决没? UDP默认最大768,不设置bootstrap.setOption("receiveBufferSizePredictorFactory", new FixedReceiveBufferSizePredictorFactory(65535));时,超过768后的数据丢弃,设置后,数据包只要不超过设置的值,按照一个包接收,如果解决了,你用的是啥方法?
sww_1026 2014-07-26
  • 打赏
  • 举报
回复
你需要加一个编解码的handler

62,634

社区成员

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

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