转自:http://vtrtbb.javaeye.com/blog/849336
这是转自javaeye的一篇文章,作者是vtrtbb。
按照网络通信的传统,我们都会自定义协议,这有很多好处,大家可以自己体会(嘿嘿)。
一直不知道socket通信时候自定义数据包是什么样子的,偶然做了个小例子。
先来说说数据包的定义,我这里是包头+内容 组成的:其中包头内容分为包类型+包长度, 那就是 消息对象=包类型+包长度+消息体
包类型 byte 型
包长度 int 型
消息体 byte[]
包总长度为 1 + 4 + 消息体.getBytes().length
发包方法如下:
private void sendTextMsg(DataOutputStream out,String msg ) throws IOException { byte[] bytes= msg.getBytes(); int totalLen = 1 + 4 + bytes.length; out.writeByte(1); out.writeInt(totalLen); out.write(bytes); out.flush(); }
客户端发送消息类为:
import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class MsgClient { private DataOutputStream outs; public static void main(String[] args) { try { MsgClient client = new MsgClient(); client.connServer("1