直接贴代码。
建议使用字节流。
消息形式为 包长度(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();