疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

关于socket 分包和组包


 

        以下资料是广州java培训机构整理

  直接贴代码。

  建议使用字节流。

  消息形式为 包长度(short)+包头(short)+messages(string)+包尾(short)

  组包

  [java]

  private void writesMessage(short cmd , String messages, short move,Socket socket) {

  initOutput();

  try {

  output.writeShort(cmd);

  output.writeChars(messages);

  output.writeShort(move);

  MyUtil.sendMessage(socket, byteOutput.toByteArray());

  } catch (Exception e) {

  e.printStackTrace();

  }

  }

  private void initOutput()

  {

  byteOutput = new ByteArrayOutputStream();

  output = new DataOutputStream(byteOutput);

  }

  /**

  * 发送数据到网络流

  *

  * @param socket

  * @param bytes

  * @throws Exception

  */

  public static void sendMessage(Socket socket, byte[] bytes)throws Exception {

  DataOutputStream dataOutput = new DataOutputStream(socket.getOutputStream());

  // 编写数据的长度

  dataOutput.writeShort(bytes.length);

  dataOutput.write(bytes);

  dataOutput.flush();

  }

  拆包

  [java]

  short len = br.readShort();//br 为DataInputStream

  short cmd = br.readShort();

  byte[] bytes = new byte[len];

  br.read(bytes, 0, len-4);

  String messgeString = new String(bytes);

  System.out.println("首条消息:"+messgeString);

  short move = br.readShort();