波多野结衣简介_爱的色放3_欧美精品一区二_五月亚洲婷婷_美女被娇喘视频_亚洲午夜免费_好吊色视频988gao在线观看_在线一区_99久久精品免费视频_欧美色吊丝_亚洲色图小说_亚洲两性视频_男女做的视频_亚洲自拍图片_免费黄色一级片

資訊專欄INFORMATION COLUMN

java解析JT808協議

ZoomQuiet / 3316人閱讀

摘要:本篇文章將介紹協議的解析思路。消息體實體類以下是對整個消息體抽象出來的一個實體類。

[TOC]

本篇文章將介紹JT808協議的解析思路。
另請大神繞路,不喜勿噴!
先寫個大致的思路,有疑問可以聯系本人,聯系方式:

emial: hylexus@163.com

1 JT808協議掃盲 1.1 數據類型
數據類型 描述及要求
BYTE 無符號單字節整形(字節, 8 位)
WORD 無符號雙字節整形(字, 16 位)
DWORD 無符號四字節整形(雙字, 32 位)
BYTE[n] n 字節
BCD[n] 8421 碼, n 字節
STRING GBK 編碼,若無數據,置空
1.2 消息結構
標識位 消息頭 消息體 校驗碼 標識位
1byte(0x7e) 16byte 1byte 1byte(0x7e)
1.3 消息頭
消息ID(0-1)    消息體屬性(2-3)    終端手機號(4-9)    消息流水號(10-11)    消息包封裝項(12-15)

byte[0-1]     消息ID word(16)
byte[2-3]     消息體屬性 word(16)
        bit[0-9]    消息體長度
        bit[10-12]    數據加密方式
                        此三位都為 0,表示消息體不加密
                        第 10 位為 1,表示消息體經過 RSA 算法加密
                        其它保留
        bit[13]        分包
                        1:消息體衛長消息,進行分包發送處理,具體分包信息由消息包封裝項決定
                        0:則消息頭中無消息包封裝項字段
        bit[14-15]    保留
byte[4-9]     終端手機號或設備ID bcd[6]
        根據安裝后終端自身的手機號轉換
        手機號不足12 位,則在前面補 0
byte[10-11]     消息流水號 word(16)
        按發送順序從 0 開始循環累加
byte[12-15]     消息包封裝項
        byte[0-1]    消息包總數(word(16))
                        該消息分包后得總包數
        byte[2-3]    包序號(word(16))
                        從 1 開始
        如果消息體屬性中相關標識位確定消息分包處理,則該項有內容
        否則無該項
2 解析

整個消息體結構中最復雜的就是消息頭了。

2.1 消息體實體類

以下是對整個消息體抽象出來的一個java實體類。

import java.nio.channels.Channel;

public class PackageData {

    /**
     * 16byte 消息頭
     */
    protected MsgHeader msgHeader;

    // 消息體字節數組
    protected byte[] msgBodyBytes;

    /**
     * 校驗碼 1byte
     */
    protected int checkSum;

    //記錄每個客戶端的channel,以便下發信息給客戶端
    protected Channel channel;

    public MsgHeader getMsgHeader() {
        return msgHeader;
    }

    //TODO set 和 get 方法在此處省略

    //消息頭
    public static class MsgHeader {
        // 消息ID
        protected int msgId;

        /////// ========消息體屬性
        // byte[2-3]
        protected int msgBodyPropsField;
        // 消息體長度
        protected int msgBodyLength;
        // 數據加密方式
        protected int encryptionType;
        // 是否分包,true==>有消息包封裝項
        protected boolean hasSubPackage;
        // 保留位[14-15]
        protected String reservedBit;
        /////// ========消息體屬性

        // 終端手機號
        protected String terminalPhone;
        // 流水號
        protected int flowId;

        //////// =====消息包封裝項
        // byte[12-15]
        protected int packageInfoField;
        // 消息包總數(word(16))
        protected long totalSubPackage;
        // 包序號(word(16))這次發送的這個消息包是分包中的第幾個消息包, 從 1 開始
        protected long subPackageSeq;
        //////// =====消息包封裝項

        //TODO set 和 get 方法在此處省略
    }

}
2.2 字節數組到消息體實體類的轉換 2.2.1 消息轉換器
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import cn.hylexus.jt808.util.BCD8421Operater;
import cn.hylexus.jt808.util.BitOperator;
import cn.hylexus.jt808.vo.PackageData;
import cn.hylexus.jt808.vo.PackageData.MsgHeader;

public class MsgDecoder {

    private static final Logger log = LoggerFactory.getLogger(MsgDecoder.class);

    private BitOperator bitOperator;
    private BCD8421Operater bcd8421Operater;

    public MsgDecoder() {
        this.bitOperator = new BitOperator();
        this.bcd8421Operater = new BCD8421Operater();
    }

    //字節數組到消息體實體類
    public PackageData queueElement2PackageData(byte[] data) {
        PackageData ret = new PackageData();

        // 1. 16byte 或 12byte 消息頭
        MsgHeader msgHeader = this.parseMsgHeaderFromBytes(data);
        ret.setMsgHeader(msgHeader);

        int msgBodyByteStartIndex = 12;
        // 2. 消息體
        // 有子包信息,消息體起始字節后移四個字節:消息包總數(word(16))+包序號(word(16))
        if (msgHeader.isHasSubPackage()) {
            msgBodyByteStartIndex = 16;
        }

        byte[] tmp = new byte[msgHeader.getMsgBodyLength()];
        System.arraycopy(data, msgBodyByteStartIndex, tmp, 0, tmp.length);
        ret.setMsgBodyBytes(tmp);

        // 3. 去掉分隔符之后,最后一位就是校驗碼
        // int checkSumInPkg =
        // this.bitOperator.oneByteToInteger(data[data.length - 1]);
        int checkSumInPkg = data[data.length - 1];
        int calculatedCheckSum = this.bitOperator.getCheckSum4JT808(data, 0, data.length - 1);
        ret.setCheckSum(checkSumInPkg);
        if (checkSumInPkg != calculatedCheckSum) {
            log.warn("檢驗碼不一致,msgid:{},pkg:{},calculated:{}", msgHeader.getMsgId(), checkSumInPkg, calculatedCheckSum);
        }
        return ret;
    }

    private MsgHeader parseMsgHeaderFromBytes(byte[] data) {
        MsgHeader msgHeader = new MsgHeader();

        // 1. 消息ID word(16)
        // byte[] tmp = new byte[2];
        // System.arraycopy(data, 0, tmp, 0, 2);
        // msgHeader.setMsgId(this.bitOperator.twoBytesToInteger(tmp));
        msgHeader.setMsgId(this.parseIntFromBytes(data, 0, 2));

        // 2. 消息體屬性 word(16)=================>
        // System.arraycopy(data, 2, tmp, 0, 2);
        // int msgBodyProps = this.bitOperator.twoBytesToInteger(tmp);
        int msgBodyProps = this.parseIntFromBytes(data, 2, 2);
        msgHeader.setMsgBodyPropsField(msgBodyProps);
        // [ 0-9 ] 0000,0011,1111,1111(3FF)(消息體長度)
        msgHeader.setMsgBodyLength(msgBodyProps & 0x1ff);
        // [10-12] 0001,1100,0000,0000(1C00)(加密類型)
        msgHeader.setEncryptionType((msgBodyProps & 0xe00) >> 10);
        // [ 13_ ] 0010,0000,0000,0000(2000)(是否有子包)
        msgHeader.setHasSubPackage(((msgBodyProps & 0x2000) >> 13) == 1);
        // [14-15] 1100,0000,0000,0000(C000)(保留位)
        msgHeader.setReservedBit(((msgBodyProps & 0xc000) >> 14) + "");
        // 消息體屬性 word(16)<=================

        // 3. 終端手機號 bcd[6]
        // tmp = new byte[6];
        // System.arraycopy(data, 4, tmp, 0, 6);
        // msgHeader.setTerminalPhone(this.bcd8421Operater.bcd2String(tmp));
        msgHeader.setTerminalPhone(this.parseBcdStringFromBytes(data, 4, 6));

        // 4. 消息流水號 word(16) 按發送順序從 0 開始循環累加
        // tmp = new byte[2];
        // System.arraycopy(data, 10, tmp, 0, 2);
        // msgHeader.setFlowId(this.bitOperator.twoBytesToInteger(tmp));
        msgHeader.setFlowId(this.parseIntFromBytes(data, 10, 2));

        // 5. 消息包封裝項
        // 有子包信息
        if (msgHeader.isHasSubPackage()) {
            // 消息包封裝項字段
            msgHeader.setPackageInfoField(this.parseIntFromBytes(data, 12, 4));
            // byte[0-1] 消息包總數(word(16))
            // tmp = new byte[2];
            // System.arraycopy(data, 12, tmp, 0, 2);
            // msgHeader.setTotalSubPackage(this.bitOperator.twoBytesToInteger(tmp));
            msgHeader.setTotalSubPackage(this.parseIntFromBytes(data, 12, 2));

            // byte[2-3] 包序號(word(16)) 從 1 開始
            // tmp = new byte[2];
            // System.arraycopy(data, 14, tmp, 0, 2);
            // msgHeader.setSubPackageSeq(this.bitOperator.twoBytesToInteger(tmp));
            msgHeader.setSubPackageSeq(this.parseIntFromBytes(data, 12, 2));
        }
        return msgHeader;
    }

    protected String parseStringFromBytes(byte[] data, int startIndex, int lenth) {
        return this.parseStringFromBytes(data, startIndex, lenth, null);
    }

    private String parseStringFromBytes(byte[] data, int startIndex, int lenth, String defaultVal) {
        try {
            byte[] tmp = new byte[lenth];
            System.arraycopy(data, startIndex, tmp, 0, lenth);
            return new String(tmp, "UTF-8");
        } catch (Exception e) {
            log.error("解析字符串出錯:{}", e.getMessage());
            e.printStackTrace();
            return defaultVal;
        }
    }

    private String parseBcdStringFromBytes(byte[] data, int startIndex, int lenth) {
        return this.parseBcdStringFromBytes(data, startIndex, lenth, null);
    }

    private String parseBcdStringFromBytes(byte[] data, int startIndex, int lenth, String defaultVal) {
        try {
            byte[] tmp = new byte[lenth];
            System.arraycopy(data, startIndex, tmp, 0, lenth);
            return this.bcd8421Operater.bcd2String(tmp);
        } catch (Exception e) {
            log.error("解析BCD(8421碼)出錯:{}", e.getMessage());
            e.printStackTrace();
            return defaultVal;
        }
    }

    private int parseIntFromBytes(byte[] data, int startIndex, int length) {
        return this.parseIntFromBytes(data, startIndex, length, 0);
    }

    private int parseIntFromBytes(byte[] data, int startIndex, int length, int defaultVal) {
        try {
            // 字節數大于4,從起始索引開始向后處理4個字節,其余超出部分丟棄
            final int len = length > 4 ? 4 : length;
            byte[] tmp = new byte[len];
            System.arraycopy(data, startIndex, tmp, 0, len);
            return bitOperator.byteToInteger(tmp);
        } catch (Exception e) {
            log.error("解析整數出錯:{}", e.getMessage());
            e.printStackTrace();
            return defaultVal;
        }
    }
}
2.2.2 用到的工具類 2.2.2.1 BCD操作工具類
package cn.hylexus.jt808.util;

public class BCD8421Operater {

    /**
     * BCD字節數組===>String
     * 
     * @param bytes
     * @return 十進制字符串
     */
    public String bcd2String(byte[] bytes) {
        StringBuilder temp = new StringBuilder(bytes.length * 2);
        for (int i = 0; i < bytes.length; i++) {
            // 高四位
            temp.append((bytes[i] & 0xf0) >>> 4);
            // 低四位
            temp.append(bytes[i] & 0x0f);
        }
        return temp.toString().substring(0, 1).equalsIgnoreCase("0") ? temp.toString().substring(1) : temp.toString();
    }

    /**
     * 字符串==>BCD字節數組
     * 
     * @param str
     * @return BCD字節數組
     */
    public byte[] string2Bcd(String str) {
        // 奇數,前補零
        if ((str.length() & 0x1) == 1) {
            str = "0" + str;
        }

        byte ret[] = new byte[str.length() / 2];
        byte bs[] = str.getBytes();
        for (int i = 0; i < ret.length; i++) {

            byte high = ascII2Bcd(bs[2 * i]);
            byte low = ascII2Bcd(bs[2 * i + 1]);

            // TODO 只遮罩BCD低四位?
            ret[i] = (byte) ((high << 4) | low);
        }
        return ret;
    }

    private byte ascII2Bcd(byte asc) {
        if ((asc >= "0") && (asc <= "9"))
            return (byte) (asc - "0");
        else if ((asc >= "A") && (asc <= "F"))
            return (byte) (asc - "A" + 10);
        else if ((asc >= "a") && (asc <= "f"))
            return (byte) (asc - "a" + 10);
        else
            return (byte) (asc - 48);
    }
}
2.2.2.2 位操作工具類
package cn.hylexus.jt808.util;

import java.util.Arrays;
import java.util.List;

public class BitOperator {

    /**
     * 把一個整形該為byte
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public byte integerTo1Byte(int value) {
        return (byte) (value & 0xFF);
    }

    /**
     * 把一個整形該為1位的byte數組
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public byte[] integerTo1Bytes(int value) {
        byte[] result = new byte[1];
        result[0] = (byte) (value & 0xFF);
        return result;
    }

    /**
     * 把一個整形改為2位的byte數組
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public byte[] integerTo2Bytes(int value) {
        byte[] result = new byte[2];
        result[0] = (byte) ((value >>> 8) & 0xFF);
        result[1] = (byte) (value & 0xFF);
        return result;
    }

    /**
     * 把一個整形改為3位的byte數組
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public byte[] integerTo3Bytes(int value) {
        byte[] result = new byte[3];
        result[0] = (byte) ((value >>> 16) & 0xFF);
        result[1] = (byte) ((value >>> 8) & 0xFF);
        result[2] = (byte) (value & 0xFF);
        return result;
    }

    /**
     * 把一個整形改為4位的byte數組
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public byte[] integerTo4Bytes(int value){
        byte[] result = new byte[4];
        result[0] = (byte) ((value >>> 24) & 0xFF);
        result[1] = (byte) ((value >>> 16) & 0xFF);
        result[2] = (byte) ((value >>> 8) & 0xFF);
        result[3] = (byte) (value & 0xFF);
        return result;
    }

    /**
     * 把byte[]轉化位整形,通常為指令用
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public int byteToInteger(byte[] value) {
        int result;
        if (value.length == 1) {
            result = oneByteToInteger(value[0]);
        } else if (value.length == 2) {
            result = twoBytesToInteger(value);
        } else if (value.length == 3) {
            result = threeBytesToInteger(value);
        } else if (value.length == 4) {
            result = fourBytesToInteger(value);
        } else {
            result = fourBytesToInteger(value);
        }
        return result;
    }

    /**
     * 把一個byte轉化位整形,通常為指令用
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public int oneByteToInteger(byte value) {
        return (int) value & 0xFF;
    }

    /**
     * 把一個2位的數組轉化位整形
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public int twoBytesToInteger(byte[] value) {
        // if (value.length < 2) {
        // throw new Exception("Byte array too short!");
        // }
        int temp0 = value[0] & 0xFF;
        int temp1 = value[1] & 0xFF;
        return ((temp0 << 8) + temp1);
    }

    /**
     * 把一個3位的數組轉化位整形
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public int threeBytesToInteger(byte[] value) {
        int temp0 = value[0] & 0xFF;
        int temp1 = value[1] & 0xFF;
        int temp2 = value[2] & 0xFF;
        return ((temp0 << 16) + (temp1 << 8) + temp2);
    }

    /**
     * 把一個4位的數組轉化位整形,通常為指令用
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public int fourBytesToInteger(byte[] value) {
        // if (value.length < 4) {
        // throw new Exception("Byte array too short!");
        // }
        int temp0 = value[0] & 0xFF;
        int temp1 = value[1] & 0xFF;
        int temp2 = value[2] & 0xFF;
        int temp3 = value[3] & 0xFF;
        return ((temp0 << 24) + (temp1 << 16) + (temp2 << 8) + temp3);
    }

    /**
     * 把一個4位的數組轉化位整形
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public long fourBytesToLong(byte[] value) throws Exception {
        // if (value.length < 4) {
        // throw new Exception("Byte array too short!");
        // }
        int temp0 = value[0] & 0xFF;
        int temp1 = value[1] & 0xFF;
        int temp2 = value[2] & 0xFF;
        int temp3 = value[3] & 0xFF;
        return (((long) temp0 << 24) + (temp1 << 16) + (temp2 << 8) + temp3);
    }

    /**
     * 把一個數組轉化長整形
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public long bytes2Long(byte[] value) {
        long result = 0;
        int len = value.length;
        int temp;
        for (int i = 0; i < len; i++) {
            temp = (len - 1 - i) * 8;
            if (temp == 0) {
                result += (value[i] & 0x0ff);
            } else {
                result += (value[i] & 0x0ff) << temp;
            }
        }
        return result;
    }

    /**
     * 把一個長整形改為byte數組
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public byte[] longToBytes(long value){
        return longToBytes(value, 8);
    }

    /**
     * 把一個長整形改為byte數組
     * 
     * @param value
     * @return
     * @throws Exception
     */
    public byte[] longToBytes(long value, int len) {
        byte[] result = new byte[len];
        int temp;
        for (int i = 0; i < len; i++) {
            temp = (len - 1 - i) * 8;
            if (temp == 0) {
                result[i] += (value & 0x0ff);
            } else {
                result[i] += (value >>> temp) & 0x0ff;
            }
        }
        return result;
    }

    /**
     * 得到一個消息ID
     * 
     * @return
     * @throws Exception
     */
    public byte[] generateTransactionID() throws Exception {
        byte[] id = new byte[16];
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 0, 2);
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 2, 2);
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 4, 2);
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 6, 2);
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 8, 2);
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 10, 2);
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 12, 2);
        System.arraycopy(integerTo2Bytes((int) (Math.random() * 65536)), 0, id, 14, 2);
        return id;
    }

    /**
     * 把IP拆分位int數組
     * 
     * @param ip
     * @return
     * @throws Exception
     */
    public int[] getIntIPValue(String ip) throws Exception {
        String[] sip = ip.split("[.]");
        // if (sip.length != 4) {
        // throw new Exception("error IPAddress");
        // }
        int[] intIP = { Integer.parseInt(sip[0]), Integer.parseInt(sip[1]), Integer.parseInt(sip[2]),
                Integer.parseInt(sip[3]) };
        return intIP;
    }

    /**
     * 把byte類型IP地址轉化位字符串
     * 
     * @param address
     * @return
     * @throws Exception
     */
    public String getStringIPValue(byte[] address) throws Exception {
        int first = this.oneByteToInteger(address[0]);
        int second = this.oneByteToInteger(address[1]);
        int third = this.oneByteToInteger(address[2]);
        int fourth = this.oneByteToInteger(address[3]);

        return first + "." + second + "." + third + "." + fourth;
    }

    /**
     * 合并字節數組
     * 
     * @param first
     * @param rest
     * @return
     */
    public byte[] concatAll(byte[] first, byte[]... rest) {
        int totalLength = first.length;
        for (byte[] array : rest) {
            if (array != null) {
                totalLength += array.length;
            }
        }
        byte[] result = Arrays.copyOf(first, totalLength);
        int offset = first.length;
        for (byte[] array : rest) {
            if (array != null) {
                System.arraycopy(array, 0, result, offset, array.length);
                offset += array.length;
            }
        }
        return result;
    }

    /**
     * 合并字節數組
     * 
     * @param rest
     * @return
     */
    public byte[] concatAll(List rest) {
        int totalLength = 0;
        for (byte[] array : rest) {
            if (array != null) {
                totalLength += array.length;
            }
        }
        byte[] result = new byte[totalLength];
        int offset = 0;
        for (byte[] array : rest) {
            if (array != null) {
                System.arraycopy(array, 0, result, offset, array.length);
                offset += array.length;
            }
        }
        return result;
    }

    public float byte2Float(byte[] bs) {
        return Float.intBitsToFloat(
                (((bs[3] & 0xFF) << 24) + ((bs[2] & 0xFF) << 16) + ((bs[1] & 0xFF) << 8) + (bs[0] & 0xFF)));
    }

    public float byteBE2Float(byte[] bytes) {
        int l;
        l = bytes[0];
        l &= 0xff;
        l |= ((long) bytes[1] << 8);
        l &= 0xffff;
        l |= ((long) bytes[2] << 16);
        l &= 0xffffff;
        l |= ((long) bytes[3] << 24);
        return Float.intBitsToFloat(l);
    }

    public int getCheckSum4JT808(byte[] bs, int start, int end) {
        if (start < 0 || end > bs.length)
            throw new ArrayIndexOutOfBoundsException("getCheckSum4JT808 error : index out of bounds(start=" + start
                    + ",end=" + end + ",bytes length=" + bs.length + ")");
        int cs = 0;
        for (int i = start; i < end; i++) {
            cs ^= bs[i];
        }
        return cs;
    }

    public int getBitRange(int number, int start, int end) {
        if (start < 0)
            throw new IndexOutOfBoundsException("min index is 0,but start = " + start);
        if (end >= Integer.SIZE)
            throw new IndexOutOfBoundsException("max index is " + (Integer.SIZE - 1) + ",but end = " + end);

        return (number << Integer.SIZE - (end + 1)) >>> Integer.SIZE - (end - start + 1);
    }

    public int getBitAt(int number, int index) {
        if (index < 0)
            throw new IndexOutOfBoundsException("min index is 0,but " + index);
        if (index >= Integer.SIZE)
            throw new IndexOutOfBoundsException("max index is " + (Integer.SIZE - 1) + ",but " + index);

        return ((1 << index) & number) >> index;
    }

    public int getBitAtS(int number, int index) {
        String s = Integer.toBinaryString(number);
        return Integer.parseInt(s.charAt(index) + "");
    }

    @Deprecated
    public int getBitRangeS(int number, int start, int end) {
        String s = Integer.toBinaryString(number);
        StringBuilder sb = new StringBuilder(s);
        while (sb.length() < Integer.SIZE) {
            sb.insert(0, "0");
        }
        String tmp = sb.reverse().substring(start, end + 1);
        sb = new StringBuilder(tmp);
        return Integer.parseInt(sb.reverse().toString(), 2);
    }
}
2.3 和netty結合 2.3.1 netty處理器鏈
import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.kkbc.tpms.tcp.service.TCPServerHandler;
import io.netty.bootstrap.ServerBootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.ChannelFuture;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelOption;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioServerSocketChannel;
import io.netty.handler.codec.DelimiterBasedFrameDecoder;
import io.netty.handler.timeout.IdleStateHandler;
import io.netty.util.concurrent.Future;

public class TCPServer2 {

    private Logger log = LoggerFactory.getLogger(getClass());
    private volatile boolean isRunning = false;

    private EventLoopGroup bossGroup = null;
    private EventLoopGroup workerGroup = null;
    private int port;

    public TCPServer2() {
    }

    public TCPServer2(int port) {
        this();
        this.port = port;
    }

    private void bind() throws Exception {
        this.bossGroup = new NioEventLoopGroup();
        this.workerGroup = new NioEventLoopGroup();
        ServerBootstrap serverBootstrap = new ServerBootstrap();
        serverBootstrap.group(bossGroup, workerGroup)//
                .channel(NioServerSocketChannel.class) //
                .childHandler(new ChannelInitializer() { //
                    @Override
                    public void initChannel(SocketChannel ch) throws Exception {
                        //超過15分鐘未收到客戶端消息則自動斷開客戶端連接
                        ch.pipeline().addLast("idleStateHandler",
                                new IdleStateHandler(15, 0, 0, TimeUnit.MINUTES));
                        //ch.pipeline().addLast(new Decoder4LoggingOnly());
                        // 1024表示單條消息的最大長度,解碼器在查找分隔符的時候,達到該長度還沒找到的話會拋異常
                        ch.pipeline().addLast(
                                new DelimiterBasedFrameDecoder(1024, Unpooled.copiedBuffer(new byte[] { 0x7e }),
                                        Unpooled.copiedBuffer(new byte[] { 0x7e, 0x7e })));
                        ch.pipeline().addLast(new TCPServerHandler());
                    }
                }).option(ChannelOption.SO_BACKLOG, 128) //
                .childOption(ChannelOption.SO_KEEPALIVE, true);

        this.log.info("TCP服務啟動完畢,port={}", this.port);
        ChannelFuture channelFuture = serverBootstrap.bind(port).sync();

        channelFuture.channel().closeFuture().sync();
    }

    public synchronized void startServer() {
        if (this.isRunning) {
            throw new IllegalStateException(this.getName() + " is already started .");
        }
        this.isRunning = true;

        new Thread(() -> {
            try {
                this.bind();
            } catch (Exception e) {
                this.log.info("TCP服務啟動出錯:{}", e.getMessage());
                e.printStackTrace();
            }
        }, this.getName()).start();
    }

    public synchronized void stopServer() {
        if (!this.isRunning) {
            throw new IllegalStateException(this.getName() + " is not yet started .");
        }
        this.isRunning = false;

        try {
            Future future = this.workerGroup.shutdownGracefully().await();
            if (!future.isSuccess()) {
                log.error("workerGroup 無法正常停止:{}", future.cause());
            }

            future = this.bossGroup.shutdownGracefully().await();
            if (!future.isSuccess()) {
                log.error("bossGroup 無法正常停止:{}", future.cause());
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        this.log.info("TCP服務已經停止...");
    }

    private String getName() {
        return "TCP-Server";
    }

    public static void main(String[] args) throws Exception {
        TCPServer2 server = new TCPServer2(20048);
        server.startServer();

        // Thread.sleep(3000);
        // server.stopServer();
    }

}
2.3.2 netty針對于JT808的消息處理器
package cn.hylexus.jt808.service;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import cn.hylexus.jt808.server.SessionManager;
import cn.hylexus.jt808.service.codec.MsgDecoder;
import cn.hylexus.jt808.vo.PackageData;
import cn.hylexus.jt808.vo.Session;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.util.ReferenceCountUtil;

public class TCPServerHandler extends ChannelInboundHandlerAdapter { // (1)

    private final Logger logger = LoggerFactory.getLogger(getClass());

    // 一個維護客戶端連接的類
    private final SessionManager sessionManager;
    private MsgDecoder decoder = new MsgDecoder();

    public TCPServerHandler() {
        this.sessionManager = SessionManager.getInstance();
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws InterruptedException { // (2)
        try {
            ByteBuf buf = (ByteBuf) msg;
            if (buf.readableBytes() <= 0) {
                // ReferenceCountUtil.safeRelease(msg);
                return;
            }

            byte[] bs = new byte[buf.readableBytes()];
            buf.readBytes(bs);

            PackageData jt808Msg = this.decoder.queueElement2PackageData(bs);
            // 處理客戶端消息
            this.processClientMsg(jt808Msg);
        } finally {
            release(msg);
        }
    }

    private void processClientMsg(PackageData jt808Msg) {
        // TODO 更加消息ID的不同,分別實現自己的業務邏輯
        if (jt808Msg.getMsgHeader().getMsgId() == 0x900) {
            // TODO ...
        } else if (jt808Msg.getMsgHeader().getMsgId() == 0x9001) {
            // TODO ...
        }
        // else if(){}
        // else if(){}
        // else if(){}
        // else if(){}
        // ...
        else {
            logger.error("位置消息,消息ID={}", jt808Msg.getMsgHeader().getMsgId());
        }
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { // (4)
        logger.error("發生異常:{}", cause.getMessage());
        cause.printStackTrace();
    }

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        Session session = Session.buildSession(ctx.channel());
        sessionManager.put(session.getId(), session);
        logger.debug("終端連接:{}", session);
    }

    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        final String sessionId = ctx.channel().id().asLongText();
        Session session = sessionManager.findBySessionId(sessionId);
        this.sessionManager.removeBySessionId(sessionId);
        logger.debug("終端斷開連接:{}", session);
        ctx.channel().close();
        // ctx.close();
    }

    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        if (IdleStateEvent.class.isAssignableFrom(evt.getClass())) {
            IdleStateEvent event = (IdleStateEvent) evt;
            if (event.state() == IdleState.READER_IDLE) {
                Session session = this.sessionManager.removeBySessionId(Session.buildId(ctx.channel()));
                logger.error("服務器主動斷開連接:{}", session);
                ctx.close();
            }
        }
    }

    private void release(Object msg) {
        try {
            ReferenceCountUtil.release(msg);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
2.3.3 用到的其他類
package cn.hylexus.jt808.server;

import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;

import cn.hylexus.jt808.vo.Session;

public class SessionManager {

    private static volatile SessionManager instance = null;
    // netty生成的sessionID和Session的對應關系
    private Map sessionIdMap;
    // 終端手機號和netty生成的sessionID的對應關系
    private Map phoneMap;

    public static SessionManager getInstance() {
        if (instance == null) {
            synchronized (SessionManager.class) {
                if (instance == null) {
                    instance = new SessionManager();
                }
            }
        }
        return instance;
    }

    public SessionManager() {
        this.sessionIdMap = new ConcurrentHashMap<>();
        this.phoneMap = new ConcurrentHashMap<>();
    }

    public boolean containsKey(String sessionId) {
        return sessionIdMap.containsKey(sessionId);
    }

    public boolean containsSession(Session session) {
        return sessionIdMap.containsValue(session);
    }

    public Session findBySessionId(String id) {
        return sessionIdMap.get(id);
    }

    public Session findByTerminalPhone(String phone) {
        String sessionId = this.phoneMap.get(phone);
        if (sessionId == null)
            return null;
        return this.findBySessionId(sessionId);
    }

    public synchronized Session put(String key, Session value) {
        if (value.getTerminalPhone() != null && !"".equals(value.getTerminalPhone().trim())) {
            this.phoneMap.put(value.getTerminalPhone(), value.getId());
        }
        return sessionIdMap.put(key, value);
    }

    public synchronized Session removeBySessionId(String sessionId) {
        if (sessionId == null)
            return null;
        Session session = sessionIdMap.remove(sessionId);
        if (session == null)
            return null;
        if (session.getTerminalPhone() != null)
            this.phoneMap.remove(session.getTerminalPhone());
        return session;
    }

    public Set keySet() {
        return sessionIdMap.keySet();
    }

    public void forEach(BiConsumer action) {
        sessionIdMap.forEach(action);
    }

    public Set> entrySet() {
        return sessionIdMap.entrySet();
    }

    public List toList() {
        return this.sessionIdMap.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());
    }

}
3 demo級別java示例

請移步: https://github.com/hylexus/jt...

另請不要吝嗇,在GitHub給個star讓小可裝裝逼…………^_^

急急忙忙寫的博客,先寫個大致的思路,有疑問可以聯系本人,聯系方式:

emial: hylexus@163.com

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.hztianpu.com/yun/66624.html

相關文章

  • 【2022版】基于部標JT808JT1078車載視頻位置監控平臺介紹-開源項目

    摘要:是定位協議通訊協議基礎協議其他協議基于該協議進行擴展。是轉發協議監管協議第三方平臺通過向進行數據獲取與事件下發。蘇標主動安全協議高級駕駛輔助報警駕駛員狀態報警胎壓監測報警盲區監測報警在觸發報警時需要上報附件視頻圖片文本。 ...

    terro 評論0 收藏1
  • JT/T808協議之:0x0001終端通用應答和0x8001平臺通用應答

    摘要:將接收到的消息還原轉義后除去消息標識和校驗位,按位異或得到的結果就是這條消息的校驗碼,和校驗位比對驗證其的一致性。將要發出的消息封裝好后出去標示位外,按位異或,得到的校驗碼放在消息尾部,然后轉義。 終端是指obd設備,既車載obd設備。 平臺是指上文中說到的通過短信設置的上報IP指向的機器所提供的網關服務。 這兩種消息一是終端設備發出的,一是平臺發出的,都是通用應答的格式,所謂通用既是...

    April 評論0 收藏0
  • 【學習筆記】用python做些事

    摘要:并返回合理錯誤提示。如果不在則再輸入密碼,成功則增加用戶信息到文件中,密碼進行加密處理。作業增加用戶名,密碼的合法化判斷和錯誤提示。 課時5:字符串-基礎 切片,索引 s = use python do somenthing s[1],s[-1],s[1:3],s[1:6:2],s[1:],s[:-1],s[:] spilt,join,[start:stop:step] 常用方法集...

    wdzgege 評論0 收藏0
  • Java窗口(JFrame)從零開始(6)——單選按鈕+復選框

    單選按鈕+復選框 單選按鈕、復選框是什么這個都知道,不做解釋。上代碼(自己寫著玩的,排班不太好)package jframe;import java.awt.BorderLayout;import java.awt.Container;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event...

    youkede 評論0 收藏0
  • LockSupport中的park與unpark原理

    摘要:的好處在于,在診斷問題的時候能夠知道的原因推薦使用帶有的操作函數作用用于掛起當前線程,如果許可可用,會立馬返回,并消費掉許可。 LockSupport是用來創建locks的基本線程阻塞基元,比如AQS中實現線程掛起的方法,就是park,對應喚醒就是unpark。JDK中有使用的如下 showImg(https://segmentfault.com/img/bVblcXS?w=884&h...

    bigdevil_s 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
av电影免费在线播放 | 日韩av一区二区三区在线观看 | 亚洲区一区二区三区 | 欧美精品成人在线 | 在线观看黄色网页 | 欧美脚交| 涩涩97| 黄色av中文字幕 | 国产精品伊人 | 狠狠操天天操 | 国产精品探花视频 | 成年网站在线视频网站 | 在线97 | 爱操视频 | 成人午夜淫片免费观看 | 欧洲成人av | 国产精品视频在线观看 | 可以免费看的av网站 | 日韩毛毛片 | 免费色网址 | 成人黄色录像 | 欧美一级少妇 | 先锋成人资源 | 蜜桃视频中文字幕 | 黄视频在线播放 | 国产精品久久一区二区三区 | 日韩精品久久久久久久 | 久久久久久久久久网站 | 五月天狠狠干 | 男女日批视频 | 天堂国产| ass大乳尤物肉体pics | 日本中文字幕一区 | 国产精品自拍一区 | 色屋在线 | 欧美性猛交xxxx乱大交俱乐部 | 91精品国产91久久久久久黑人 | 中文字幕亚洲精品 | 中文字字幕在线中文乱码电影 | 欧美黄色片免费看 | 泰剧19禁啪啪无遮挡 | 在线高清观看免费 | 风流少妇一区二区三区91 | 在线观看www.| 激情综合激情五月 | 久久九九99 | www日日日 | 欧美va视频 | 超碰伊人 | 超碰在线亚洲| 456亚洲影院 | 精久久久久久久 | 香港黄色网 | 国产在线精品视频 | 婷婷超碰 | 玉女心经在线看 | www午夜| 美女隐私无遮挡 | 欧美有码在线 | 青青草视频免费 | 柠檬福利第一导航在线 | 欧洲激情网 | a在线观看 | 黄色成人毛片 | 久久久精品免费观看 | 超碰在线人人 | 在线观看毛片网站 | av在线播放中文字幕 | 91久久久久久久久久久 | 亚洲女优在线观看 | 成人天堂噜噜噜 | av免费网站 | 久久大香| 日本h在线 | 欧美熟妇精品一区二区蜜桃视频 | 大地二资源在线观看高清国语版 | 欧美高清免费 | 日韩国产免费 | 在线观看xxxx | 亚洲乱码视频 | 中日韩中文字幕 | 最新国产露脸在线观看 | 欧美爱爱网站 | 久草久热 | 星铁乱淫h侵犯h文 | 久久99久久99精品免观看软件 | 在线观看黄色网页 | 国产精品久久一区二区三区 | 色天堂视频| 午夜看片 | 性一交一乱一区二区洋洋av | 男18无遮挡脱了内裤 | 国产又粗又猛视频免费 | 二十四小时在线更新观看 | 看特级毛片 | 天天爱天天做 | 操干视频 | 欧美日韩h | 婷婷精品在线 | 亚洲啊v| 久久综合狠狠综合久久综合88 | 一起操在线观看 | 在线播放国产一区 | 激情小说亚洲图片 | 国产1区2区在线观看 | 老师让我她我爽了好久视频 | 美国免费高清电影在线观看 | 欧美熟妇精品一区二区蜜桃视频 | 中文字幕亚洲欧美日韩高清 | 69精品无码成人久久久久久 | 欧k影视| 亚洲午夜激情 | 超碰人人干 | 牛牛电影国产一区二区 | 欧美私人影院 | 完美搭档在线观看 | 久久九九99 | 亚洲国产一区在线观看 | 久久久精品免费观看 | 风流少妇一区二区三区91 | 日本福利在线观看 | 国产福利在线观看 | 韩国三级与黑人 | 黄色小说免费在线观看 | 40到50岁中老年妇女毛片 | 涩涩五月天 | 你懂得在线观看 | 亚洲天堂av在线播放 | 男人天堂一区 | av老女人| 69精品无码成人久久久久久 | 少妇被躁爽到高潮无码人狍大战 | 日本美女一区二区 | 欧美毛片基地 | 中文字幕在线免费看 | 久久久久久精 | 一级片黄色 | 欧美成人黄色片 | 在线观看www.| 国产精品视频在线观看 | 午夜色图 | 欧美激情性做爰免费视频 | 麻豆视频在线观看 | 韩国一区二区在线观看 | 免费看欧美大片 | 欧美国产精品 | 中国男女全黄大片 | 欧美片网站免费 | 亚洲第一免费 | 国产免费久久 | 在线高清观看免费 | 欧美性生活视频 | videosex抽搐痉挛高潮 | 天天干天天草天天射 | 日韩久久成人 | 97看片| 黄色片在线观看视频 | 二区三区视频 | 欧美日韩在线观看一区二区 | 欧美 日韩 综合 | 91精品国产免费 | 国产精品久久一区二区三区 | 阿娇全套94张未删图久久 | 日日夜操 | 亚洲欧洲视频 | 99在线视频播放 | 久久这里有 | 波多在线观看 | 国产原创麻豆 | 奇米影视在线播放 | 亚洲爽爽| 日日夜夜影院 | 涩涩五月天 | 黄桃av| 蜜乳av红桃嫩久久 | 99热免费在线观看 | 一级大片视频 | 色中文字幕 | 国产精品tv| 色婷婷综合久久久中文字幕 | 伊人网视频 | 成人免费在线播放 | 国内91视频 | 熟妇高潮一区二区三区 | 成人羞羞国产免费 | 天天摸夜夜添狠狠添婷婷 | 色婷婷综合久久久中文字幕 | 视频在线你懂的 | 一级免费观看 | 色婷婷社区 | 欧美一级爱爱 | 琪琪五月天| 18免费网站| 传媒av在线 | 一级全黄裸体片 | 三级av片 | 日韩精品一区二区三区免费视频 | 日本性视频网站 | 国产首页 | 国产亚洲一区二区三区在线观看 | 欧美视频久久久 | 视频在线观看免费大片 | 波多野吉衣一二三区乱码 | 黄黄的网站| 中文字幕在线免费看 | 久久成人在线 | www夜片内射视频日韩精品成人 | 亚洲第一免费 | 中文字幕亚洲乱码熟女1区2区 | 国产一极片 | 污污网站在线 | 久久免费精品 | 又粗又大又深又硬又爽 | 黄色网入口 | 三级黄色免费 | 久久一 | 污视频网站免费看 | 成人在线激情视频 | 中文字幕亚洲区 | 丁香六月综合激情 | 动漫美女无遮挡免费 | 久久成人免费视频 | 九九九热视频 | 欧美69久成人做爰视频 | 黄色免费看片网站 | 爆操白丝美女 | 污视频网站免费看 | 日韩中文一区 | 国产第页 | 韩国无码一区二区三区精品 | 国产无遮挡裸体免费视频 | 大陆熟妇丰满多毛xxxⅹ | 日本黄色xxx | 爱综合网| 日韩五月天 | 波多在线观看 | 综合久久久久久久 | 久久手机视频 | 精品无码久久久久久久久 | 久久久久久一区二区三区 | 一区二区三区欧美视频 | 亚洲欧洲日本在线 | 日韩三级黄色 | 亚洲作爱视频 | 日本精品一区二区三区视频 | 91精品人妻一区二区三区 | 西西444www无码大胆 | 国产一区二区av | 18免费网站 | 人人草人人爽 | 亚洲免费区 | 日韩久久一区二区 | 妻子的性幻想 | 久久精品波多野结衣 | 亚洲av无码国产综合专区 | 性视频播放免费视频 | 五月婷婷开心中文字幕 | 美女扒开尿口给男人桶 | 日韩黄色免费观看 | 日本久久久久久久久久 | 337p日本欧洲亚洲大胆张筱雨 | 国产91小视频 | 在线观看亚洲国产 | 卡一卡二卡三 | 日批国产 | 亚洲成年人 | 黄色aaa视频 | 性高潮久久久久久久 | 97看片吧 | xxx在线视频 | 亚洲女优在线观看 | 欧美一级少妇 | 92国产精品| 成人亚洲 | 污视频网站在线看 | 日本五十肥熟交尾 | 国产精品xxx在线观看 | 国产视频一区在线 | 久久色婷婷 | 日本一区二区视频在线 | 国产青青青 | 91成人在线观看喷潮动漫 | 久久极品视频 | a级黄毛片 | 成人亚洲 | 污污视频免费观看 | 蜜乳av红桃嫩久久 | 女m被s玩胸虐乳哭着求饶 | 欧美自拍视频 | 亚洲精品白浆高清久久久久久 | 青青草国产成人99久久 | 久久久青草 | 色婷婷综合久久久中文字幕 | 91中文| 在线高清观看免费 | 欧美精品中文 | 91好色先生 | 天天干视频在线观看 | 亚洲激情成人 | 清纯粉嫩极品夜夜嗨av | 99热网址| 欧美又粗又深又猛又爽啪啪九色 | 美女视频在线播放 | 91嫩草在线 | 伊人网视频 | 国产乱人| 国产精品探花视频 | 国产成人精品片 | 亚洲一区二区欧美 | 强睡邻居人妻中文字幕 | 柠檬福利第一导航在线 | 黑人爱爱视频 | 天天操天天操天天操 | 9999热| 国产精品白虎 | 又黄又色| 国精品一区 | 成人欧美日韩 | 9999热| 337p亚洲精品色噜噜狠狠 | 开心激情播播 | 日韩精品免费一区二区夜夜嗨 | 欧美私人影院 | 欧美亚洲国产一区二区三区 | 中日韩中文字幕 | 男男黄网站| 中文字幕亚洲精品 | xxx免费视频 | 最近中文字幕av | 美女爆乳18禁www久久久久久 | 日本中文字幕视频 | 口舌奴vk | 色婷婷综合久久久中文字幕 | 亚洲午夜精品一区二区三区 | 国产精品探花一区二区在线观看 | 国产精品久久久一区 | 亚洲人天堂 | 久久影院在线观看 | 熟妇熟女乱妇乱女网站 | 少妇无码一区二区三区 | 国产麻豆精品久久一二三 | 精品无码国产一区二区三区51安 | 久久av在线 | 欧美视频久久久 | 影音先锋久久 | 北条麻妃99精品青青久久 | 和黑帮大佬的365 | www.日韩在线观看 | 国产一区二区中文字幕 | 年代下乡啪啪h文 | 亚洲天堂av在线播放 | 91成人在线观看喷潮动漫 | 色婷婷国产精品 | 亚洲视频在线观看一区二区 | 天天插天天射 | 99日韩精品 | 狠狠香蕉 | 伊人国产在线 | 91久久国产 | 午夜在线看 | 亚洲精品中文字幕 | 美女扒开双腿 | 97在线视频免费 | 免费观看毛片视频 | 欧美亚洲国产一区二区三区 | 亚洲免费福利视频 | 鲁一鲁在线 | 国产欧美在线看 | 淫欲的美女理论电影完整版 | 黄色片www| 亚洲黄色在线观看 | 在线欧美 | 看全色黄大色黄女片18 | 国产亚洲一区二区三区在线观看 | 中日一级片 | a级片久久 | 成年人视频免费在线观看 | 97自拍偷拍| 国产日比视频 | 麻豆视频免费版 | 无码人妻久久一区二区三区 | 不卡av在线 | 青青草国产成人99久久 | 成人免费视频国产免费 | 国产大片b站 | 爆操白丝美女 | 99久久99久久精品国产片果冻 | 女人做爰全过程免费观看美女 | 午夜视频在线播放 | 国产三级不卡 | 天天拍夜夜操 | 青青青草视频在线观看 | 国产h视频在线观看 | 免费av播放 | 超碰97人人爱 | 在线色av| 欧美mv日韩mv国产网站app | 成人做爰视频www | 依人久久| 欧美性猛交xxxx乱大交俱乐部 | 成年人毛片| a一级黄色 | 丰满熟妇乱又伦 | 日本伊人久久 | 中文字幕亚洲欧美日韩高清 | av中文网站 | 伊人天堂av| 在线观看黄色片 | 国产乱码一区 | 国偷自产视频一区二区久 | 黄色片www| 99久久99久久精品国产片果冻 | 日本高清二区 | 亚洲自拍偷拍网站 | 日本五十肥熟交尾 | 婷婷av一区二区三区 | 91久久国产| 亚洲av毛片 | 女女百合国产免费网站 | 亚洲一区二区欧美 | 国产1区2区在线观看 | 久久久国产一区二区三区 | 午夜院线 | 少妇视频在线观看 | 华丽的外出在线 | 成人免费黄色网 | 婷婷中文| 综合久久久久 | 亚洲欧美在线看 | 淫视频在线观看 | 日本精品在线 | 中文字幕视频在线观看 | 亚洲理论片 | 污网站视频 | 日韩理论片在线观看 | 亚洲精品中文字幕 | 火影忍者羞羞漫画 | 999国产精品视频 | 久久久久噜噜噜亚洲熟女综合 | 奇米影视av| 337p日本欧洲亚洲大胆张筱雨 | 日本国产一区二区三区 | 国产精品欧美在线 | 91精品国产91久久久久久黑人 | 黄色av网站免费 | 国产精品乱码 | 韩国三级hd中文字幕 | 91成人免费看 | 成人午夜视频在线 | 四虎影视免费永久大全 | 中国精品毛片 | 91黄色大片 | 男人操女人网站 | 少妇自拍视频 | 福利在线观看 | 欧美亚洲中文精品字幕 | 国产成人在线免费观看视频 | 99爱在线视频 | 少妇被躁爽到高潮无码人狍大战 | 青青视频在线免费观看 | 日韩精品在线一区 | 日本黄页网 | 人妻精品久久久久中文 | 在线观看网页视频 | 亚洲欧洲日本在线 | 国产日比视频 | 嫩草在线 | 日本少妇xxxx软件 | 传媒av在线 | 午夜视频在线免费 | 日本精品视频在线播放 | 免费爱爱视频网站 | 免费av网站观看 | 欧洲成人免费视频 | 国产精品视频在线观看 | 完美搭档在线观看 | 欧美一级成人 | 综合久久久久 | 激情网五月 | 高h喷水荡肉少妇爽多p视频 | 久久亚洲一区二区 | 青青青草视频在线观看 | 天天综合影院 | 黄色片网站在线观看 | 精品伦精品一区二区三区视频密桃 | 草草免费视频 | 91中文 | 人人爽人人插 | 日一日射一射 | 久久久久免费观看 | 中文字幕一区二区三区精华液 | 久久综合99 | 激情小说在线 | 台湾黄色网址 | 特黄aaaaaaaaa真人毛片 | 亚洲精品二| 91精品国产免费 | www色日本 | 国产精品入口麻豆 | 精品国产乱码久久久久久郑州公司 | 国产美女自慰在线观看 | 91久久精品一区二区 | www男人天堂 | 亚洲成人精品久久 | 北京富婆泄欲对白 | 张柏芝亚洲一区二区三区 | 亚洲午夜精品一区二区三区 | 四虎成人精品永久免费av九九 | 欧美亚洲国产一区二区三区 | 国产色播| 欧美丰满熟妇bbbbbb | 青娱乐超碰在线 | 奇米影视77777 | 欧美一级爱爱 | 亚洲综合区 | 亚洲人天堂 | 一级免费黄色片 | 麻豆国产精品一区 | 动漫3d精品一区二区三区乱码 | 大地二资源在线观看高清国语版 | 97播播 | 自拍偷拍专区 | 熟妇熟女乱妇乱女网站 | 欧美精品videos另类 | 玖玖玖影院 | www男人天堂 | 免费成人av片 | 91亚洲欧美| 一级免费黄色片 | 日韩美女在线视频 | 国产在线精品视频 | 99精品视频在线 | 今天高清视频在线观看播放 | 午夜影视在线观看 | 国产精品久久久久久亚洲色 | 免费看黄色a级片 | 蜜乳av红桃嫩久久 | 又黄又爽的免费视频 | av免费网站| 欧美午夜精品一区二区 | 日本久色 | 国产精品免费一区二区三区 | 草莓视频污视频 | 日韩一区二区三区四区五区六区 | 后宫秀女调教(高h,np) | 男人操女人网站 | 精品无码久久久久久久久 | 精品伦精品一区二区三区视频密桃 | 亚洲精品乱码久久久久 | 最近中文字幕av | 欧美在线免费观看视频 | 欧美又粗又深又猛又爽啪啪九色 | 精品国产123| 神马久久久久久久久 | 黑夜传说1 | 免费三片在线观看网站v888 | 午夜久久久久久久久久 | 人人草人人爽 | 亚洲欧美另类图片 | 午夜精品一区二区三区在线视频 | 中文字幕一区二区三区精华液 | 精品日韩在线观看 | 国产a电影 | 国产精品99视频 | 娇小的粉嫩xxx极品 天天射天天射 | 欧美亚洲中文精品字幕 | 色蝌蚪 | 亚洲少妇一区二区 | 五十路母 | xxx在线视频 | 国产在线精品一区二区 | 中日韩男男gay无套 中文字幕8 | 免费a视频在线观看 | 玩弄人妻少妇500系列 | 欧美婷婷 | 欧美一级成人 | 91短视全免费 | 神马久久久久久久久 | 少妇69xx| 亚洲av无码乱码国产精品久久 | 国产麻豆传媒 | 亚洲国产成人精品女人久久久 | 爱情岛亚洲论坛入口福利 | 99久久久无码国产精品免费蜜柚 | 中文字幕亚洲乱码熟女1区2区 | 亚洲欧美另类图片 | 中文字幕观看 | 91久久精品一区二区 | 中文字幕电影 | 青青草激情视频 | 成人国产网站 | 麻豆做爰免费观看 | 在线观看国产欧美 | 亚洲色图另类 | 中文天堂网 | 国产精品999 | 北条麻妃99精品青青久久 | 美女靠逼app| 特大黑人巨交吊性xxxx视频 | 日韩三级 | 麻豆视频在线观看 | 国产91在线视频 | 乱日视频| 成年人一级片 | 男人都懂的网站 | 亚洲精品第一页 | 日本美女交配 | 黑丝啪啪 | 91久久精品日日躁夜夜躁欧美 | 国产黄色小说 | 精品资源成人 | 日本大乳奶做爰 | 国产又爽又黄视频 | 51国产偷自视频区视频 | 涩涩五月天 | 国产a级黄色片 | 图片区偷拍区小说区 | 美国av导航 | 欧洲成人av | 国产精品白丝喷水在线观看 | 日日夜夜免费精品 | 日本极品丰满ⅹxxxhd | 青青操原| 天天草夜夜操 | 国产97视频| 玩弄人妻少妇500系列 | 久久涩视频| 精品九九九九 | 中文在线www | 五月天狠狠操 | 国产麻豆精品久久一二三 | 色人阁视频 | 黄黄的网站 | 老师让我她我爽了好久视频 | ass亚洲肉体欣赏pics | 日韩和欧美的一区二区 | 一区二区三区欧美视频 | 777奇米四色 | 永久免费视频网站直接看 | 欧美日韩麻豆 | 中文字幕第一页在线 | 亚洲一区二区观看 | 欧美在线免费观看视频 | 国产精品探花一区二区在线观看 | 插插插91| www.久久| 专干老肥女人88av | 欧美私人影院 | 91亚洲欧美 | 成人av图片 | 91精品人妻一区二区三区蜜桃欧美 | 国产亚洲精品女人久久久久久 | 99在线视频精品 | 久久成人一区 | 免费色网址| 男女网站免费 | 国精品一区 | 午夜在线观看视频 | 成人免费毛片果冻 | av电影免费在线播放 | 亚洲免费区 | 婷婷综合五月 | 插插影视| 午夜国产精品视频 | 性高潮久久久久久久 | 国产精品视频入口 | 久久超| 青娱乐青青草 | 人人澡人人看 | 91禁漫h动漫羞羞网站 | 国产一区二区欧美 | 少妇扒开粉嫩小泬视频 | 欧美婷婷| 在线观看网页视频 | 精品无码免费视频 | 五月婷婷激情四射 | 色婷婷综合久久久中文字幕 | 日日操夜夜爱 | 九九九九精品九九九九 | 日日拍拍 | 成人丁香婷婷 | 永久免费视频网站直接看 | 在线看污视频 | 欧美黄色片免费看 | 美女扒开双腿 | 五月婷婷久久久 | 色悠悠视频 | 灌篮高手全国大赛电影 | 欧美国产日韩一区 | 日本伊人久久 | 一区二区在线免费观看视频 | 麻豆做爰免费观看 | 免费在线一区二区三区 | 美女一区二区三区四区 | 日韩2区 | 91免费短视频 | 成人av电影免费观看 | 国产成人精品无码片区在线 | 国产精品久久久久久吹潮 | 三级av片 | 成人黄色免费电影 | 动漫3d精品一区二区三区乱码 | 男人天堂中文字幕 | 日本一级一片免费视频 | 午夜精品一区二区三区在线视频 | 日韩中文字幕不卡 | 美国毛片网站 | 欧美爱爱网站 | 国产乱码一区 | 国产精品免费一区二区三区 | 免费av网站观看 | 一级免费观看 | 99爱在线 | 男女瑟瑟网站 | 午夜激情网站 | 色综合中文字幕 | 成年女人免费视频 | 国产视频资源 | 婷婷亚洲天堂 | 麻豆国产精品一区 | 色婷婷国产精品 | 中文字幕第4页 | 午夜aaa片一区二区专区 | 成人亚洲 | 欧美高清hd18日本 | 青春草视频| 欧美一区二区三区成人精品 | 九九视频在线免费观看 | 天天摸夜夜添狠狠添婷婷 | 好吊操视频这里只有精品 | 色噜噜在线观看 | 五月婷婷六月色 | 少妇视频在线观看 | 午夜大片 | 日批网址 | 亚洲精品色午夜无码专区日韩 | 艳母日本动漫在线观看 | 青娱乐青青草 | 少妇被躁爽到高潮无码人狍大战 | 国产精品免费一区二区三区 | www婷婷| 免费在线一区二区三区 | 国产白丝在线观看 | 超污视频网站 | 亚洲av无码国产综合专区 | 国产精品白虎 | av不卡网站| 日本黄色xxx | 欧美 日韩 综合 | 欧美日韩中文字幕一区二区 | 樱桃av | 国产乱码一区 | 超污视频网站 | 国产精品伊人 | 欧美精品成人在线 | 亚洲免费中文字幕 | 欧美mv日韩mv国产网站app | av老女人 | 男女福利视频 | 中文字幕亚洲区 | 国产日比视频 | 超碰伊人 | www男人天堂 | 草莓视频污视频 | www.国产91| 黄色av中文字幕 | 欧美va视频 | 国产精品免费一区二区三区 | 91亚洲国产成人精品一区 | 欧美性猛交xxxx乱大交退制版 | 色噜噜在线观看 | 色鬼艳魔大战1春荡女淫 | 橹图极品美女无圣光 | 国产乱码精品一区二区三区中文 | 91片看 | 亚洲欧美日韩综合在线 | 日本在线视频中文字幕 | 欧美午夜在线 | 国产呦系列 | 亚洲国产精品无码久久久久高潮 | 午夜黄色小视频 | 性色av蜜臀av浪潮av老女人 | 国产免费久久 | 口舌奴vk| 看全色黄大色黄女片18 | 天天毛片 | 亚洲成成品网站 | 性生活免费网站 | 狠狠操夜夜爽 | 猫咪av在线| 国产中文字幕一区 | 奇米影视av| 久久免费在线视频 | 日本成人网址 | 亚洲国产成人久久 | 怡红院最新网址 | 羞羞网站在线观看 | 午夜aaa片一区二区专区 | 黄色一级带 | 91狠狠| 操到喷水 | 欧美精品videos另类 | 欧美性猛交xxxx黑人猛交 | 国产亚洲色婷婷久久99精品91 | 天堂在线1| 亚洲视频二 | 中文字幕一区二区三区精华液 | 久久综合99| 98在线视频| 欧美成在线 | 日韩经典一区二区 | 日本久久99| 香蕉视频免费看 | 亚洲色图另类 | 大地二资源在线观看高清国语版 | 欧美在线亚洲 | 国产又粗又大又爽视频 | 午夜激情网站 | 九九九热视频 | 欧美成在线视频 | 麻豆国产精品一区 | 特黄色一级片 | 成人教育av | 特黄aaaaaaaaa毛片免费视频 | 免费日b视频 | 欧美精品中文 | 午夜激情视频在线观看 | 亚洲美女一区二区三区 | 香蕉福利 | 国产高清av在线 | 在线不卡一区 | 今天高清视频在线观看播放 | 成人啪啪漫画羞羞漫画 | 亚洲欧美精品一区二区三区 | 在线观看黄色网页 | gogo人体做爰大胆视频 | 午夜在线看 | 少妇高潮惨叫久久久久久 | 丁香婷婷久久久综合精品国产 | 午夜精品久久久久久久久久 | 女女百合国产免费网站 | 欧美成在线视频 | 日韩一区二区三区四区在线 | 秘密的基地 | 1024国产在线| 午夜免费在线 | 一本不卡| 福利免费视频 | 在线97 | 91国产高清| 超碰在线影院 | 黄页网站在线播放 | 高清不卡毛片 | 成人天堂噜噜噜 | 婷婷五月综合久久中文字幕 | 精品九九九九 | 97超碰成人 | 久久国产亚洲 | 久久久久噜噜噜亚洲熟女综合 | 波多野结衣av无码 | 国产精品白丝喷水在线观看 | 天天拍夜夜操 | 在线97| 欧美骚少妇 | 免费三级av | 青青操原 | 色噜噜在线观看 | 日韩在线免费av | 男人插入女人阴道视频 | 国产激情久久久久久熟女老人av | 亚洲精品国产精品乱码不99按摩 | 日本精品视频在线播放 | 免费一级毛片麻豆精品 | 午夜精品久久久久久久久久 | heyzo在线播放 | 欧美大片高清免费观看 | 国产精品吴梦梦 | 婷婷精品在线 | 成人羞羞国产免费 | 国产一区免费 | 黄色成人毛片 | 午夜视频在线播放 | 久久黄色大片 | 国产在线精品一区二区 | 欧洲激情网 | 免费a视频在线观看 | 中国国产bdsm紧缚捆绑 | 成人做爰视频www | 91精品国产91久久久久久黑人 | 欧美又粗又深又猛又爽啪啪九色 | 91精品国产综合久久久蜜臀粉嫩 | 久久亚洲电影 | 日本特黄一级 | 依人久久 | 深夜视频18| 九一网站在线观看 | 国产在线高清 | 口舌奴vk | 91亚洲精品在线观看 | 久久99视频| 蜜桃视频中文字幕 | 亚洲第一免费 | 夜夜视频 | 超碰免费公开 | 日本成人网址 | 超碰在线亚洲| 国产欧美在线看 | 亚洲欧美精品一区二区三区 | 91久久国产| www.色多多| 色婷婷av一区二区三区之红樱桃 | 神马影院午夜伦理 | 日韩人妻无码一区二区三区99 | 在线观看毛片网站 | www婷婷| 欧美a∨ | 五月婷婷六月色 | 色愁久久 | 国产日韩欧美中文字幕 | 蜜桃视频在线观看www | 两女双腿交缠激烈磨豆腐 | 午夜aaa片一区二区专区 | 日本黄色网址大全 | 精品欧美在线 | 午夜精品一区二区三区在线视频 | 91人人爽 | 免费在线一区二区三区 | 人妻一区二区在线 | 毛茸茸的中国女bbw 国产午夜精品久久久 | 涩涩五月天 | 秘密基地动漫在线观看免费 | 欧美黄在线 | 欧美老熟妇xb水多毛多 | 韩国一区二区在线观看 | 99久久久无码国产精品免费蜜柚 | 日韩精品免费一区二区夜夜嗨 | 在线看一区 | 女女les互磨高潮国产精品 | 456亚洲影院 | 欧美性猛交xxxx乱大交俱乐部 | 久久久888 | 亚洲成人精品久久 | 国产成人高清在线 | 亚洲欧美另类图片 | av中文天堂 | 6699嫩草久久久精品影院 | h片在线免费看 | 久久亚洲精品小早川怜子 | 欧美zzoo| 国产亚洲色婷婷久久99精品91 | 亚洲精品乱码久久久久 | 国产成人av一区 | 狠狠操夜夜爽 | 97精产国品一二三产区 | 一级大片视频 | 日本成人一级片 | 天天亚洲 | 欧美激情一区二区三区 | 免费一二三区 | 亚洲成成品网站 | 色婷婷av一区二区三区之红樱桃 | 免费色片| 日本一区二区视频在线 | 亚洲日本中文 | 欧美jizz欧美性大全 | 日本高清三区 | 久草青青草 | 久久黄色大片 | 好吊一区二区三区 | 日本欧美激情 | 视频在线观看免费大片 | 国产乱子伦精品视频 | 污污视频免费观看 | 日韩免费高清 | 精品日韩在线观看 | 久久国产免费视频 | 成人啪啪漫画羞羞漫画 | 香港黄色网 | 男女床上拍拍拍 | 日韩免费高清 | 久久影视精品 | 精品欧美在线 | 华丽的外出在线 | 五月天亚洲色图 | 国产chinesehd精品露脸 | 欧美一级爱爱 | 大陆熟妇丰满多毛xxxⅹ | av中文天堂 | 日韩精品福利 | 波多野结衣中文字幕在线 | 亚洲女成人图区 | 国产a级黄色片 | 国产一区二区欧美 | 蜜桃91视频 | 狠狠操在线观看 | 黑人极品ⅴideos精品欧美棵 | 性一交一乱一区二区洋洋av | 欧美丝袜丝交足nylons | 人人爽人人插 | 永久免费视频网站直接看 | 激情综合激情五月 | 日本一区二区在线 | 日本黄页网 | 国产精品入口麻豆 | 国产精品三 | 天天躁日日躁aaaaxxxx | 成人在线视频观看 | 日本高清视频在线 | 想要视频在线观看 | 色婷婷av一区二区三区之红樱桃 | 成人免费毛片男人用品 | 欧美香蕉在线 | 337p日本欧洲亚洲大胆张筱雨 | 大陆熟妇丰满多毛xxxⅹ | 91久久精品日日躁夜夜躁欧美 | 日本福利在线观看 | 午夜激情网站 | 久久久久久久久久网站 | 毛片官网 | 九九热九九 | www.午夜视频 | 精品人妻午夜一区二区三区四区 | 年代下乡啪啪h文 | 性高潮视频在线观看 | 女m被s玩胸虐乳哭着求饶 | 亚洲天堂日本 | 国产一区免费 | 水密桃av | 狠狠网站| 天天插天天射 | 亚洲麻豆精品 | 99re国产 | 火影忍者羞羞漫画 | 最近中文字幕av | 日本国产一区二区三区 | 青青草视频免费 | 超碰狠狠操 | 久久久观看 | 午夜视频免费看 | 性史性dvd影片农村毛片 | 国产精品天天干 | 久热最新 | 精品国产乱码久久久久久郑州公司 | 狠狠网站| 亚洲精品97久久 | 黄色免费看片网站 | 成人在线视频观看 | 国产精品免费一区二区三区 | 伊人影院av| 中文字幕一区二区人妻电影 | 日韩精品视频在线免费观看 | 国产视频一区二区在线观看 | 免费网站观看www在线观 | 欧美精品亚洲精品 | 亚洲色图另类 | 在线观看成人网 | 欧美一区二区视频在线 | 国产精品91久久 | 日韩和欧美的一区二区 | 大香焦久久 | 成人黄色一级 | 男女瑟瑟网站 | 精品欧美在线 | 久久久久久久成人 | 日批国产| 艳母日本动漫在线观看 | 色噜噜狠狠狠综合曰曰曰 | 欧美第四页| 善良的女朋友在线观看 | 张柏芝亚洲一区二区三区 | 久久av一区| 成人啪啪漫画羞羞漫画 | 无码人妻精品一区二区三区蜜桃91 | 高清久久久| 国产又大又黄的视频 | 无码人妻精品一区二区三区蜜桃91 | 欧美大片免费 | 蕾丝视频污 | 黑人性高潮 | 老年人毛片 | 欧美综合一区二区三区 | 蜜桃视频在线观看www | 夜夜视频 | 性生活视屏 | 黄色网址免费 | 琪琪五月天| 色婷婷社区 | 色天堂视频| 欧洲成人免费视频 | 四虎影库在线播放 | 亚洲天堂一区二区三区 | 操干视频 | 伊人色网 | 国产精品久久一区二区三区 | 波多野结衣一区二区三区在线观看 | 高潮呻吟videoshd | 视频在线观看免费大片 | 美国免费高清电影在线观看 | 禁断介护老人中文字幕 | av视屏| 无码人妻精品一区二区三区蜜桃91 | av免费网站 | 免费观看av的网站 | 亚洲美女视频 | 亚洲视频国产精品 | 黄色小说免费在线观看 | 欧美影院一区 | 俄罗斯特级毛片 | 大地二资源在线观看高清国语版 | 久久国产精品久久久 | 麻豆av在线播放 | 黄色免费看片网站 | 国产高清免费在线播放 | 日韩精品视频在线免费观看 | 在线观看亚洲国产 | 免费特级毛片 | 强睡邻居人妻中文字幕 | 97在线看 | 夜色资源网 | 熟睡侵犯の奶水授乳在线 | 奇米影视77777| 依人久久| 国产精品111 | 亚洲一区二区观看 | 久久久久久中文字幕 | 草比网站 | 俄罗斯特级毛片 | av国产免费| 天天操天天操天天操 | 一区二区三区日韩欧美 | 久久综合狠狠综合久久综合88 | 黄色精品在线观看 | 91人妻一区二区 | 97在线播放 | aaa亚洲精品 | 国产第页 | 国产麻豆精品久久一二三 | 一级性爱视频 | 女同黄色小说 | 久久久久久一区二区三区 | 91久久国产综合久久91精品网站 | 美国免费高清电影在线观看 | 日本在线视频免费观看 | 五月婷婷六月色 | 少妇高潮惨叫久久久久久 | 美女扒开双腿 | 色七七视频| 传媒av在线| 成年网站在线视频网站 | 亚洲天堂av在线播放 | 涩人阁 | 91老肥熟 | 久久精品噜噜噜成人 | 女人做爰全过程免费观看美女 | 欧美一区二区视频在线 | 在线观看www. | 欧美国产日韩一区二区 | 91短视全免费 | 殴美一级黄色片 | 精品无码人妻一区二区三区品 | 国内精品久久久久久 | 婷婷精品在线 | 大地资源二中文在线影视观看 | 成人黄色录像 | 日韩欧美大片在线观看 | 日韩精品在线视频 | 黄色激情av | 少妇高潮惨叫久久久久久 | 美女隐私无遮挡 | 99久久99久久精品国产片果冻 | 在线播放国产一区 | av无限看 | 橹图极品美女无圣光 | 特大黑人巨交吊性xxxx视频 | 爆操欧美美女 | 欧美成人精品激情在线视频 | 日韩精品视频在线免费观看 | 国产三级不卡 | 亚洲专区在线播放 | 天天摸夜夜添狠狠添婷婷 | 91精品国产成人观看 | a天堂在线视频 | 一区二区三区日韩欧美 | 可以免费看的av网站 | 日韩精品第二页 | 久久午夜视频 | 婷婷中文 | 51国产偷自视频区视频 | 复古经典毛茸茸xxxxxxxx | 成人h在线观看 | 久久精品一区 | 风流少妇一区二区三区91 | 黄色免费网站在线观看 | 在线观看三级电影 | 嫩草在线 | 福利免费视频 | 99热这里只有精品在线观看 | 国产精品久久久久久吹潮 | 张柏芝亚洲一区二区三区 | 一本不卡 | 欧美激情性做爰免费视频 | 久久av一区 | 瑟瑟在线观看 | 欧美xxxx18国产 | 能免费看av的网站 | 欧美日韩国产高清 | 国语毛片| 天天摸夜夜添狠狠添婷婷 | 特色黄色片 | 日韩理论片在线观看 | 五月丁香久久婷婷 | 国产精品精品国产 | 久久三级视频 | 日本黄色xxx| 黄黄的网站 | 国产黄色小说 | 日韩人妻无码一区二区三区99 | 欧美精品 在线观看 | 中文字幕一区二区三区精华液 | 国产精品2 | 淫视频在线观看 | 99热免费| 永久免费视频网站直接看 | 九九视频在线播放 | 97播播| 97在线播放 | 国产精品第三页 | 日韩一页 | 在线观看国产精品入口男同 | 91嫩草在线 | 国产又爽又黄视频 | 操大爷影院| 男女床上拍拍拍 | 在线观看免费黄色 | 天天插天天射 | 91丝袜在线 | 一二三区视频 | 神马午夜国产 | 国产又粗又大又硬 | 成人91视频 | 久久久久久国产精品 | 可以看的毛片 | 欧美成在线 | 中文字幕亚洲乱码熟女1区2区 | 青娱乐青青草 | 亚洲av无码乱码国产精品久久 | 久久超 | 91成人在线观看喷潮动漫 | 91天堂| 成人免费在线播放 | 久操视频免费观看 | 97播播| 绿帽视频 | 国产欧美在线看 | 天天综合亚洲 | 四虎精品一区二区三区 | 欧美人妻日韩精品 | 亚洲高清毛片 | 国产九九精品视频 | 就去吻亚洲| 中文字幕观看 | 一级性爱视频 | 亚洲女优在线观看 | 韩国三级hd中文字幕 | 久久精品一区 | 91色站 | 欧美熟妇精品一区二区蜜桃视频 | a级小视频| 亚洲成年网站 | 中文字幕视频在线观看 | 欧亚一区二区 | 超碰人人干 | 国模在线| 国内精品久久久久久 | 欧亚一区二区 | 亚洲精品v | 色愁久久| 大学生三级中国dvd 亚洲成人精品久久 | 日本黄色大片免费 | 久久一二三四区 | 爆操白丝美女 | 亚洲麻豆精品 | 久久亚洲电影 | 性高潮视频在线观看 | 嘿咻免费视频 | 久青草视频在线观看 | 亚洲免费福利视频 | 日韩大尺度视频 | 日韩精品免费一区二区夜夜嗨 | 爱草在线视频 | 黄网在线免费观看 | 碧蓝之海动漫在线观看免费高清 | 国产成人av一区 | 国产又粗又猛又爽又黄的 | 亚洲视频综合 | 亚洲乱码视频 | 总裁憋尿呻吟双腿大开憋尿 | 小嫩女直喷白浆 | 青春草视频 | 青春草视频 | 污污视频免费观看 | 国产黄色影视 | a级免费毛片 | 婷婷激情av | 7777奇米影视| www.在线播放 | 日韩影音 | 午夜肉体高潮免费毛片 | 亚洲黄视频 | 看片网站在线观看 | 久久ww| 亚洲午夜一区二区 | 四虎影库在线播放 | 欧美私人影院 | 日本五十肥熟交尾 | 欧洲一区二区在线 | av片在线观看免费 | 99热网址 | 黄色一级带 | 国产精品久久久久久吹潮 | 麻豆影音先锋 | 手机在线观看毛片 | 五月天婷婷综合网 | av大片在线 | 久久久久草| www.亚洲| 五月开心网 | 人妻少妇偷人精品视频 | 草莓视频污视频 | 亚洲热视频 | 两女双腿交缠激烈磨豆腐 | 欧美老熟妇xb水多毛多 | 成年人视频网 | 亚洲综合久久久 | 91黄色大片| 伊人天堂av | 中文字幕第18页 | 夜夜摸夜夜操 | 最好看的2019免费观看 | 国产18在线 | 男人天堂一区 | 中文字幕一二三 | 天堂影视在线观看 | 中国精品毛片 | 国产精品99视频 | 99热这里只有精品在线观看 | 国产精品一级 | 337p日本欧洲亚洲大胆张筱雨 | 亚洲色图自拍 | 欧美日韩三级在线 | 国产熟女高潮一区二区三区 | 午夜精品久久久久久久久久 | 成人动漫网站在线观看 | 熟妇高潮一区二区三区 | 四虎影视免费永久大全 | 亚洲播放器 | 国产精品久久一区二区三区 | 超碰在线免费 | av一区在线观看 | 黄色免费看片网站 | 污污视频免费观看 | 久热在线 | 午夜美女福利 | 欧美成人小视频 | 国产又粗又猛又爽又黄的 | 男人插入女人阴道视频 | 巨粗高h双龙筋肉体育生 | 日韩黄色免费观看 | 日本美女交配 | 国产chinesehd精品露脸 | 亚洲熟妇色自偷自拍另类 | 另类日韩 | 中文久久精品 | 日本五十肥熟交尾 | 日皮视频免费观看 | 天堂影视在线观看 | 欧美激情性做爰免费视频 | 中文字幕一区二 | 超碰在线免费公开 | 亚洲av毛片 | 久久超| 日日拍拍 | 欧美又粗又大aaa片 亚洲欧洲视频 | 国产成人高清在线 | 国产精品v欧美精品v日韩 | 欧美又粗又大aaa片 亚洲欧洲视频 | 亚洲美女一区二区三区 | 日本极品丰满ⅹxxxhd | 国产乱码精品一区二区三区中文 | 国产在线97| 91丝袜在线 | 亚洲国产一区在线观看 | 美女视频在线播放 | 日日操夜夜爱 | 91在线播放视频 | 成人黄页| 一级片手机在线观看 | 中文字幕丰满乱子伦无码专区 | 乱色视频| 亚洲综合色视频 | 欧洲天堂网 | 奇米久久| 国产卡一卡二 | 激情视频一区 | 樱桃香蕉视频 | 黄色片在线观看视频 | 免费av影视| 99re国产精品 | 国产精品高清无码在线观看 | 五月开心网 | 人人草人人射 | 久草五月天 | 香港黄色网 | 性欧美sm调教 | 在线观看毛片网站 | 冲田杏梨 在线 | 青青视频在线免费观看 | 天堂av在线资源 | 69精品无码成人久久久久久 | 青青草日本 | 一区二区三区毛片 | 二区三区视频 | 看免费毛片| 96视频在线| 久久综合99| 天天天天干 | 玉女心经在线看 | 777奇米四色 | 黄污视频在线观看 | 性高潮视频在线观看 | 欧美成人黄色片 | 特黄aaaaaaaaa真人毛片 | 国产chinesehd精品露脸 | www.五月激情 | 日韩有色| 修仙淫交(高h)h文 | 免费看一级大片 | 亚洲一级影院 | 午夜免费激情视频 | 女人洗澡一级特黄毛片 | 亚洲精品国产精品乱码不99按摩 | 日日拍拍 | 日本国产一区二区三区 | 国产亚洲激情 | 亚洲熟妇无码久久精品 | 五月丁香久久婷婷 | 色欲av无码一区二区三区 | 青青青草视频在线观看 | 欧美日韩中文字幕一区二区 | 完美搭档在线观看 | 一级色网站 | 打白嫩光屁屁女网站 | 成人亚洲 | www.一区二区 | 性视频免费 | 最好看的2019免费观看 | 男人的天堂一区二区 | www.亚洲 | 白又丰满大屁股bbbbb | 潘金莲一级淫片免费放动漫 | 日本少妇xxxxx | 久久国产精品免费视频 | 九九视频在线播放 | 国产亚洲精品成人a | 国产97在线观看 | 国产超级av | 做爰视频 | 超碰免费av | 国产1区2区在线观看 | 欧美成人激情在线 | 亚洲午夜激情 | 精品久久一| 午夜色图| 国产午夜精品久久久 | 911精品国产一区二区在线 | 一本一道久久a久久精品蜜桃 | 亚洲不卡在线视频 | 巨粗高h双龙筋肉体育生 | 国产精品探花视频 | 日韩久久一区二区 | 一区二区三区欧美视频 | 韩国无码一区二区三区精品 | 99re国产 | 一区二区av在线 | 五月天久久久久久 | 精品日韩在线观看 | 澳门黄色一级片 | 欧美影院一区 | 大地资源二中文在线影视观看 | 在线观看亚洲 | 欧美激情一区二区三区 | 激情综合激情五月 | 欧美一级生活片 | 美国av导航| 青娱乐导航| 草草免费视频 | 欧美色激情 | 精品国产欧美一区二区三区成人 | 欧美亚洲在线视频 | 国内外成人在线视频 | 亚洲欧美精品一区二区三区 | 91禁漫h动漫羞羞网站 | 伊人网视频 | 色婷婷小说 | 成人午夜淫片免费观看 | 国产精品久久影视 | 日韩精品免费一区二区夜夜嗨 | 国产精品入口麻豆 | 亚洲精品色午夜无码专区日韩 | 黄色漫画免费观看 | 日本黄色大片免费 | 黄色国产视频 | 在线观看国产欧美 | 97超碰精品 | 色吧av色av | 日韩免费高清 | 怡红院最新网址 | a级片久久| 欧洲成人av | 中文字字幕在线中文乱码电影 | 熟妇熟女乱妇乱女网站 | 久久男人天堂 | 欧美高清hd18日本 | 樱桃香蕉视频 | 亚洲成人精品久久 | 国模在线| 国产精品探花在线观看 | 操干视频 | 少妇无码一区二区三区 | 男男黄网站 | 国产又粗又猛视频免费 | 国内视频精品 | 日韩av第一页 | 亚洲综合中文字幕在线 | 国产青青青 | 中文字幕亚洲乱码熟女1区2区 | 色哟哟精品一区 | 欧美性猛交xxxx乱大交俱乐部 | 国产视频一区二区在线观看 | 五月天久久久久久 | 7777奇米影视 | 亚洲视频在线观看一区二区 | 成人av图片 | 亚洲日日夜夜 | 一级黄色短视频 | 精品无码人妻一区二区三区品 | 亚洲黄色小说网 | 伊人天堂av | 欧美mv日韩mv国产网站app | 九九视频在线免费观看 | 成人性生交大片免费 | 尤物视频免费观看 | 好吊操视频这里只有精品 | 精产国产伦理一二三区 | 久久极品视频 | 人妻丰满熟妇av无码区hd | 国产色播 | 丁香花电影免费播放电影 | 日韩毛毛片 | 国产又爽又黄视频 | 日本一区二区视频在线 | 日本妈妈9| 蜜桃91视频 | 欧美成人三区 | 久久一 | 中文字幕 自拍偷拍 | 欧美69久成人做爰视频 | 亚洲天堂日本 | 欧美综合一区二区三区 | av蜜臀网站 | 欧美一级生活片 | 色噜噜在线观看 | 午夜精品久久久久久久爽 | 国产亚洲色婷婷久久 | 国模在线观看 | 超碰在线免费公开 | 久久99视频| 6699嫩草久久久精品影院 | 久久国产免费视频 | 激情视频91 | 在线观看免费黄色 | 91黄色片| 4hu最新网址 | 午夜在线观看影院 | 亚洲午夜激情 | 神马久久久久久久久 | 国产成人a人亚洲精品无码 最近中文字幕av | 日本美女一区二区 | 精久久久久久久 | 欧美国产片 | 国产精品电影网站 | 麻豆视频在线观看 | 亚洲高清毛片 | 深夜视频18 | 中文字幕亚洲欧美日韩高清 | 特级毛片在线观看 | 亚洲一区二区三区免费视频 | 免费在线国产视频 | 国产精品久久网站 | 国产a国产 | 插入综合网 | 91人人爽| 人人草人人射 | 日本一级一片免费视频 | 久久久91 | 看片网站在线观看 | 懂色av蜜臀av粉嫩av分享 | 欧美69久成人做爰视频 | 四虎影库在线播放 | 99re视频这里只有精品 | 少妇被躁爽到高潮无码人狍大战 | 综合导航 | 91桃色在线观看 | 人人草人人射 | 欧美婷婷| 久久超| 亚洲激情成人 | 国产精品乱码 | 成人免费毛片男人用品 | av免费一区 | 中文字幕一区二区人妻电影 | 不卡在线播放 | 亚洲自拍偷拍网站 | 精品久久免费 | 超碰人人超碰 | 打白嫩光屁屁女网站 | 亚洲作爱视频 | 91色国产 | 国产a电影 | 国产又粗又猛视频免费 | 久久亚洲电影 | 在线看污视频 | 97播播 | 一区二区在线免费观看视频 | 国产性色av | 国产性色av | 永久免费视频网站直接看 | 后宫秀女调教(高h,np) | 国产伦精品一区 | 国产精品吴梦梦 | 亚洲精品国产精品乱码不99按摩 | 依人久久 | 日本国产一区 | 91亚洲国产成人精品一区 | 亚洲天堂av在线播放 | 草莓视频免费在线观看 | 久久久在线 | 成人在线综合 | 精品无码国产一区二区三区51安 | 永久免费视频网站直接看 | 人妻一区二区在线 | 999视频| 中文字幕综合在线 | 在线播放国产一区 | 精品无码久久久久久久久 | 在线观看成人网 | 中文有码在线 | 1769在线视频 | 日本黄页网 | 性高潮久久久久久久 | 久久精品波多野结衣 | 欧美日韩国产高清 | av大片在线| 男女日批视频 | 人成在线 | 黄色美女一级片 | 日皮视频免费观看 | 九一网站在线观看 | 中文字幕女同女同女同 | 九九视频在线播放 | 特黄aaaaaaaaa毛片免费视频 | 欧美黑人xxxx | 国产一区二区中文字幕 | 国产精品自拍一区 | 天天干夜夜欢 | 欧美一级网 | 亚洲激情网 | 中文av在线播放 | 一区二区三区欧美视频 | 天天干视频在线观看 | 五月开心网 | 国产h视频在线观看 | 亚洲免费区 | 黄色小说免费在线观看 | 国产一区二区中文字幕 | 97在线看 | 大陆熟妇丰满多毛xxxⅹ | 久草色在线 | 婷婷五月综合久久中文字幕 | 天天插天天射 | 柠檬福利第一导航在线 | 日本精品在线播放 | 超碰在线免费 | 国产精品入口麻豆 | 日韩精品久 | 91免费视频 | ass亚洲肉体欣赏pics | 在线免费看污视频 | 麻豆av在线播放 | 日韩爱爱网| 日韩成人一区二区 | 好吊操视频这里只有精品 | 国产九九精品视频 | 星铁乱淫h侵犯h文 | 欧美片网站免费 | 强睡邻居人妻中文字幕 | 明日叶三叶 | 懂色av蜜臀av粉嫩av分享 | 国产成人在线观看免费网站 | 成年人免费网站在线观看 | 国产精成人 | 青青草国产精品 | 西欧毛片| 男女瑟瑟网站 | 97看片吧 | 欧美第二页 | 欧美a∨ | 复古经典毛茸茸xxxxxxxx | 国产午夜电影 | 国产一级二级 | 涩人阁| 色噜噜在线观看 | 91黄色大片| 精品欧美在线 | 久久亚洲一区二区 | 欧美日韩国产高清 | 成人福利在线 | 亚洲在线电影 | 懂色av蜜臀av粉嫩av分享 | 总裁憋尿呻吟双腿大开憋尿 | 青青草成人在线观看 | a级黄毛片 | 涩涩网站在线观看 | 在线不卡中文字幕 | 亚洲天堂一区二区三区 | 丁香婷婷久久久综合精品国产 | 97自拍偷拍 | 波多野结衣av无码 | 国产美女自慰在线观看 | 久久精品大片 | 一级全黄裸体片 | 开心激情播播 | 国产一区二区视频在线 | 看黄色一级视频 | 一区二区三区毛片 | 午夜在线看 | 日韩有码第一页 | 娇小的粉嫩xxx极品 天天射天天射 | 美女免费视频观看 | 第一福利丝瓜av导航 | 欧美国产片 | 黄色免费看片网站 | 九九热视频在线播放 | 精品九九九九 | 国产精品一区三区 | 99激情网 | 另类日韩 | 前所未有的深入 | 69精品无码成人久久久久久 | 久久精品爱 | 丁香花电影免费播放电影 | 92国产精品 | 欧美日韩中文字幕一区二区 | 久久精品波多野结衣 | 丰满熟妇乱又伦 | 亚洲涩综合 | 又粗又大又深又硬又爽 | 九九综合久久 | 婷婷欧美 | 狠狠操天天操 | 天天干夜夜欢 | 黄色免费网站在线观看 | 奶妈的诱惑 | 日韩影音| 成年人免费网站在线观看 | 色午夜av | 国产精品高清无码在线观看 | 久久精选| 国产在线小视频 | 日日夜夜免费精品 | 一区二区三区毛片 | 国内精品一区二区 | 日韩成人一区二区 | 精品国产不卡 | 国产精品偷拍 | 在线97 | 污污内射久久一区二区欧美日韩 | 97人人爱| 婷婷香蕉 | 97在线看| 婷婷香蕉 | 国产精品免费一区二区三区 | 日韩一区二区三区四区五区六区 | 欧美熟妇精品一区二区蜜桃视频 | 久久色婷婷 | 亚洲区一区二区三区 | 91人人爽| 爱操视频| 色悠悠视频| yy6080午夜 | 午夜在线网站 | 亚洲色图另类 | 91快射| 久久精品噜噜噜成人 | 青青青草视频在线观看 | 免费网站观看www在线观 | 欧美二区在线观看 | 国产中文字幕在线播放 | 日韩精品在线一区 | 免费午夜影院 | 日本三级视频在线观看 | 91国产高清| 亚洲欧美日本一区 | 91抖音在线观看 | 黄网在线免费观看 | 91免费影片| 青青草国产成人99久久 | 国产呦系列 | 两女双腿交缠激烈磨豆腐 | 无码人妻aⅴ一区二区三区玉蒲团 | 国产精品2 | 97精品在线观看 | www.亚洲国产 | 一区二区在线免费观看视频 | av中文网| 99re国产精品 | 成年人精品 | av中文网站 | 亚洲第一免费 | 91黄色大片 | 欧美综合一区二区三区 | 国产一区二区欧美 | 日韩影音 | 日本高清视频在线 | 欧美黄色片免费看 | 美女爱爱视频 | 四虎网址在线观看 | 福利视频免费 | 国产呦系列 | 欧美激情自拍偷拍 | 自拍亚洲欧美 | 动漫美女被到爽 | 成人在线一区二区三区 | 欧美黄色片免费看 | 中文字幕丰满乱子伦无码专区 | 澳门黄色一级片 | 五月婷婷中文 | 淫视频在线观看 | 中文字幕 自拍偷拍 | 日本在线观看 | a级小视频 | 天天草夜夜操 | 麻豆做爰免费观看 | 一区二区三区日本 | 久久三级视频 | 国产精品sm | 91在线观看视频 | 国产精品久久一区二区三区 | 久久久久噜噜噜亚洲熟女综合 | 中文字幕第一页在线 | 日本久久99| 女同vk | 天天干夜夜欢 | 依人在线 | 欧美丰满熟妇bbbbbb | 99在线视频精品 | 久久久国产一区二区三区 | 丁香网站 | 成人黄页 | 天天综合影院 | 依人久久 | 国产精品久久久久久亚洲色 | 爱爱色图| a级片免费在线观看 | 黄色美女一级片 | 国产精品嫩草69影院 | 黄色1级视频 | 麻豆精品一区二区 | 日本亚洲在线 | 男人操女人的视频 | 欧美在线亚洲 | 国产成人av一区 | 亚洲精品777 | 国产精选在线观看 | 在线观看网页视频 | 99婷婷 | 动漫美女被到爽 | 中文字字幕在线中文乱码电影 | 国产熟女高潮一区二区三区 | 婷婷五月综合久久中文字幕 | 91久久久久久久久久久 | 中文字幕第18页 | 人妻熟女一区 | 国产熟女高潮一区二区三区 | 夜夜操夜夜爱 | 美女扒开尿口给男人桶 | 欧美一区免费观看 | 一区二区三区毛片 | 日本高清视频在线 | 午夜肉体高潮免费毛片 | 国产美女视频免费观看下载软件 | 欧美日韩h | 日本高清二区 | 在线不卡 | 国产精品探花一区二区在线观看 | 午夜精品一区二区三区在线视频 | 911精品国产一区二区在线 | 成人免费视频国产免费 | 波多野结衣一区二区三区在线观看 | 亚洲欧美日本一区 | 日本伊人久久 | 妻子的性幻想 | 日韩在线免费av | 怡红院av| 亚洲午夜激情 | 99视频免费看 | 亚洲色图自拍 | 亚洲天堂一区二区三区 | 玉女心经 在线 | 狠狠狠操 | 四虎影视免费永久大全 | 伊人久久久久久久久久 | 国产成人精品无码片区在线 | 青青操原| 久久精品成人 | www狠狠干 | 九九九热视频 | 日本激情小视频 | 欧美日韩麻豆 | 青青青草视频在线 | 亚洲综合色视频 | 在线色av| 蜜桃精品视频在线 | 日本h在线 | 青青草视频免费 | 久久久99精品免费观看 | 日日夜夜精 | 樱桃香蕉视频 | 中文字幕自拍偷拍 | 亚洲精品小视频 | 特黄aaaaaaaaa毛片免费视频 | 麻豆亚洲一区 | 五月婷婷久久久 | 亚洲欧美在线看 | 操到喷水| 天天摸夜夜添狠狠添婷婷 | 视频网站在线观看18 | 亚洲国产成人精品女人久久久 | 大香焦久久 | 91片看 | 人妻精品久久久久中文 | 亚洲激情网| <