使用 AndroidSocketClient 庫建立 SSL 安全連結
阿新 • • 發佈:2019-01-08
/** * 設定包長度轉換器 * 即每次傳送資料時,將包頭以外的資料長度轉換為特定的byte[]傳送到遠端端用於解析還需要讀取多少長度的資料 * * 例:socketClient.sendData(new byte[]{0x01, 0x02})的步驟為 * 1. socketClient向遠端端傳送包頭(如果設定了包頭資訊) * 2. socketClient要傳送的資料為{0x01, 0x02},長度為2(若設定了包尾,還需加上包尾的位元組長度),通過此轉換器將int型別的2轉換為4位元組的byte[],遠端端也照此演算法將4位元組的byte[]轉換為int值* 3. socketClient向遠端端傳送轉換後的長度資訊byte[] * 4. socketClient向遠端端傳送正文資料{0x01, 0x02} * 5. socketClient向遠端端傳送包尾(如果設定了包尾資訊) * * 此轉換器用於第二步 * * 使用{@link com.vilyever.socketclient.helper.SocketPacketHelper.ReadStrategy.AutoReadByLength}必須設定此項 * 用於分隔多條訊息 */ socketClient.getSocketPacketHelper().setSendPacketLengthDataConvertor(new SocketPacketHelper.SendPacketLengthDataConvertor() { @Override public byte[] obtainSendPacketLengthDataForPacketLength(SocketPacketHelper helper, int packetLength) { /** * 簡單將int轉換為byte[] */byte[] data = new byte[4]; data[3] = (byte) (packetLength & 0xFF); data[2] = (byte) ((packetLength >> 8) & 0xFF); data[1] = (byte) ((packetLength >> 16) & 0xFF); data[0] = (byte) ((packetLength >> 24) & 0xFF); return data; } }); /** * 根據連線雙方協議設定自動傳送的包頭資料 * 每次傳送資料包(包括心跳包)都會在傳送包內容前自動傳送此包頭 * * 若無需包頭可刪除此行 */ socketClient.getSocketPacketHelper().setSendHeaderData(CharsetUtil.stringToData("SocketClient:", CharsetUtil.UTF_8)); /** * 根據連線雙方協議設定自動傳送的包尾資料 * 每次傳送資料包(包括心跳包)都會在傳送包內容後自動傳送此包尾 * * 若無需包尾可刪除此行 * 注意: * 使用{@link com.vilyever.socketclient.helper.SocketPacketHelper.ReadStrategy.AutoReadByLength}時不依賴包尾讀取資料 */ socketClient.getSocketPacketHelper().setSendTrailerData(new byte[]{0x13, 0x10}); /** * 設定分段傳送資料長度 * 即在傳送指定長度後通過 {@link SocketClientSendingDelegate#onSendingPacketInProgress(SocketClient, SocketPacket, float, int)}回調當前傳送進度 * * 若無需進度回撥可刪除此二行,刪除後仍有【傳送開始】【傳送結束】的回撥 */ socketClient.getSocketPacketHelper().setSendSegmentLength(8); // 設定傳送分段長度,單位byte socketClient.getSocketPacketHelper().setSendSegmentEnabled(true); // 設定允許使用分段傳送,此值預設為false /** * 設定傳送超時時長 * 在傳送每個資料包時,傳送每段資料的最長時間,超過後自動斷開socket連線 * 通過設定分段傳送{@link SocketPacketHelper#setSendSegmentEnabled(boolean)} 可避免傳送大資料包時因超時斷開, * * 若無需限制傳送時長可刪除此二行 */ socketClient.getSocketPacketHelper().setSendTimeout(30 * 1000); // 設定傳送超時時長,單位毫秒 socketClient.getSocketPacketHelper().setSendTimeoutEnabled(true); // 設定允許使用傳送超時時長,此值預設為false