Tcp 服务端自定义协议,客户端解析协议的处理
- 我们想想,为什么要定义协议:
回答:因为我们在传输的过程中会出现分包(没有接受到一个完整的包)与黏包(收到比一包多的数据,除去完整的一包,首尾有数据)的问题,所以我这里我是服务端自定义通信协议,客户端协议解析。由于我这里是要实现一个下位机给我发数据,我要将他的数据拿到并以图的形式显示在app界面。
接下来我们看下面,协议是参考这个的,图片是网上找的,代码中的同步字我定义的是一字节,帧类型是一字节,信息长度是2字节,数据是2字节,结束字2字节(这个出了点下问题在测试)
先来看看服务端代码:
import com.google.common.primitives.Bytes;
import com.google.common.primitives.Shorts;
import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @Author Wangjj
* @Create 2018/4/8.
* @Content
*/
public class Server {
private static