一、Netty解决TCP协议数据分包问题思路
public byte[] send(byte[] sendData) throws UnknownHostException, IOException { Socket socket = new Socket(serverIp, serverPort); OutputStream os = socket.getOutputStream(); InputStream is = socket.getInputStream(); byte resultArray[] = null; try { // 定义一个发送消息协议格式:|--header:4 byte--|--content:10MB--| // 获取一个4字节长度的协议体头 byte[] dataLength = intToByteArray(4, sendData.length); // 和请求的数据组成一个请求数据包 byte[] requestMessage = combineByteArray(dataLength, sendData); //发送数据------------------------------- os.write(requestMessage); os.flush(); //接收数据------------------------------- resultArray = IOUtils.toByteArray(is); } catch (Exception e) { e.printStackTrace(); } finally { os.close(); is.close(); socket.close(); } return resultArray; }
private static byte[] intToByteArray(int byteLength, int intValue) { return ByteBuffer.allocate(byteLength).putInt(intValue).array(); } private static byte[] combineByteArray(byte[] array1, byte[] array2) { byte[] combined = new byte[array1.length + array2.length]; System.arraycopy(array1, 0, combined, 0, array1.length); System.arraycopy(array2, 0, combined, array1.length, array2.length); return combined; }
@Override public void initChannel(SocketChannel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast("framedecoder",new LengthFieldBasedFrameDecoder(1024*1024*1024, 0, 4,0,4)); pipeline.addLast(new TCPServiceHandler());// 处理业务Handler }
Netty 处理 TCP协议数据分包问题,布布扣,bubuko.com
原文:http://blog.csdn.net/suifeng3051/article/details/34444585