1. 程式人生 > >迴圈buffer解決網路通訊中資料的不完整接收

迴圈buffer解決網路通訊中資料的不完整接收

網路通訊中,資料的獲取有時候並不按照你的想法進行,想每一次獲取的都是完整的資料幀,但是得到的卻是殘缺的幀,一個完整的幀分成幾段獲取到,或者一次獲取幾個完整幀。如何取得我們要處理的完整的幀,使用迴圈buffer可以解決這個問題,分享給各位

            // 迴圈buffer實現資料的接收以及處理
            Byte[] receiveBuffer = new Byte[16];  // 資料接收緩區                   
            Byte[] cycleBuffer = new Byte[1024];  // 用來儲存資料
            Byte[] frameBuffer = new Byte[16];    // 從cycleBuffer中得到的幀 
            Int32 receiveCount;                   // 接收到的資料數
            Int32 indexHead, indexTail;           // 頭指標,尾指標
            indexHead = indexTail = 0;             
      

            // 將接收到的資料放到迴圈buffer中去
            for (int i = 0; i < receiveCount; i++)
            {
                indexTail++;
                if (indexTail == cycleBuffer.Length)
                {
                    indexTail = 0;
                }

                if ((indexTail == (cycleBuffer.Length - 1)) && (indexHead == 0))    
                    break;  
                else  
                {  
                    if ((indexTail + 1) == indexHead)  
                         break;  
                }
                cycleBuffer[indexTail] = receiveBuffer[i];
            }
            // 開始在迴圈buffer中取幀--指定字串
            Int32 indexTemp = indexHead;
            while (indexTemp != indexTail)
            {
                if (cycleBuffer[indexTemp] == (Byte)'$')  // 找到幀
                {
                    Int32 dec = 0;
                    while (indexHead != indexTemp)
                    {
                        frameBuffer[dec++] = cycleBuffer[indexHead];
                        indexHead++;
                        if (indexHead == cycleBuffer.Length)
                        {
                            indexHead = 0;
                        }
                    }

                    // 處理取出來的一幀資料
                    ........................
                }
                else
                {
                    indexTemp++;
                    if (indexTemp == cycleBuffer.Length)
                    {
                        indexTemp = 0;
                    }
                }
            }


相關推薦

迴圈buffer解決網路通訊資料完整接收

網路通訊中,資料的獲取有時候並不按照你的想法進行,想每一次獲取的都是完整的資料幀,但是得到的卻是殘缺的幀,一個完整的幀分成幾段獲取到,或者一次獲取幾個完整幀。如何取得我們要處理的完整的幀,使用迴圈buffer可以解決這個問題,分享給各位 // 迴圈b

計算機網路通訊資料加密技術的應用

通訊方面的安全,重點在下述的兩個領域:第一個是資訊在進行傳遞過程中的安全,第二個是資訊在進行儲存過程中的安全。 使用鏈路的方式進行加密 過程:因為在所有中間部位的傳遞節點當中,訊息全部被經過解密以後,再一次實施加密操作,所以,將路由資訊涵蓋在鏈路當中,全部的資料普遍使用祕聞的方式進

如何解決機器學習資料平衡問題

這幾年來,機器學習和資料探勘非常火熱,它們逐漸為世界帶來實際價值。與此同時,越來越多的機器學習演算法從學術界走向工業界,而在這個過程中會有很多困難。資料不平衡問題雖然不是最難的,但絕對是最重要的問題之一。  一、資料不平衡 在學術研究與教學中,很多演算法都有一個基本假設,那

spark 讀取elasticsearch資料完整問題

使用spark讀取elasticsearch中的資料,使用es提供的api來進行, sc.esRDD("logstash").values 官方網站也是這種方式讀取資料的,但是我測試的時候有時候會出現讀取資料不完整的情況,比如本來讀取的資料是這樣的 Map(msg ->

串列埠通訊解決serialport.DataReceived接收到的資料完整

private SerialPort serialport = new SerialPort(); private StringBuilder builder = new StringBuilder(); // private String

文字分類問題資料均衡的解決方法的探索

資料傾斜是資料探勘中的一個常見問題,它嚴重影響的資料分析的最終結果,在分類問題中其影響更是巨大的,例如在之前的文字分類專案中就遇到類別文字集合嚴重不均衡的問題,本文主要結合專案實驗,介紹一下遇到資料不均衡問題時的常見解決方法。 資料傾斜的解決方法 1.過取樣和欠

解決vue在IE,資料同步,檢視更新,開啟ie除錯時資料資料檢視就更新了的問題

最近專案要支援ie,這也是最令人蛋疼的地方,相信不少朋友被之前的ie低版本坑的不輕,廢話不多說,先來介紹一下,ie11中出現的奇葩現象 當你用vue加axios,發請求,請求後端介面更新資料,實現檢視同步更新,這個操作在ie本地,谷歌以及360等瀏覽器是沒有問題的,但是鄙人

解決虛擬機Linux能上網的問題

點擊狀態 默認 pro setting network res set nat模式 bsp 第一步、虛擬機中的設置 點擊右上角的網絡標識,點擊network settings,選擇Wired,Add Profile,IPv4,Addresses設置成Automati

導致資料庫資料一致的根本原因

資料庫中很有可能存在不一致的資料。   一般導致資料庫中資料不一致的根本原因有三種情況。第一種是資料冗餘造成的,第二種是併發控制不當造成的,第三種是由於某種原因(比如軟硬體故障或者操作錯誤)導致資料丟失或資料損壞。   讓我們具體講講這三種情況: 第一種情況:資料冗餘 假如資料庫

解決在VS2005 當前會命中斷點 原始碼與原始版本不同 的問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Oracle 表,表資料小心刪除找回的方法

一:drop 掉的表可以通過閃回來恢復 比如:   flashback table t1 to timestamp to_timestamp('2018-10-15 13:04:13','yyyy-mm-dd hh24:mi:ss'); 二:delete 的表中資料可以通

網路通訊的一些基本概念

以下內容摘抄自網路 IP(網際協議) 網際網路協議地址,常見的有IPv4和IPv6兩大類。 IP協議三個定義: 1.IP定義了在TCP/IP網際網路上資料傳送的基本單元和資料格式。 2.IP軟體完成路由選擇功能,選擇資料傳送的路徑。 3.IP包含了一組不可靠分組

【轉】QT 串列埠QSerialPort + 解決接收資料完整問題

類:QSerialPort 例程:Examples\Qt-5.9.1\serialport\terminal,該例子完美展示了qt串列埠收發過程,直接在這上面修改就可以得到自己的串列埠軟體。核心方法 //讀串列埠QByteArray QSerialPort::readAll()//寫串列埠qint64 Q

spring-session和redis解決spring cloudsession一致性問題

       現在都比較流行使用spring boot來進行開發,使用spring cloud來搭建分散式。在搭建的時候會涉及到一個關鍵的問題,session統一的問題。使用zuul作為閘道器轉發來呼叫其他模組,zuul中的session和其他模組的session會不一致,同

解決type=file獲取到value值

做前端開發的童鞋肯定會遇到這樣的需求,獲取表單裡面全部input的值。 但是也不難發現這樣的bug,給type=“file”的input標籤賦值value,然後再通過js去獲取value的時候,發現根本拿不到想要的那個值,拿到的是空字串。 通過zepto或者

網路通訊的三次握手和四次揮手詳解

0.  準備知識 (1)ACK ,TCP協議規定只有ACK=1時有效,也規定連線建立後所有傳送的報文的ACK必須為1。 (2)SYN,在連線建立時用來同步序號。當SYN=1而ACK=0時,表明這是一個連線請求報文。對方若同意建立連線,則應在響應報文中使SYN=1和ACK=

Flink執行時之基於Netty的網路通訊

PartitionRequestClient 分割槽請求客戶端(PartitionRequestClient)用於發起遠端PartitionRequest請求,它也是RemoteChannel跟Netty通訊層之間進行銜接的物件。 對單一的TaskMan

QT 串列埠QSerialPort + 解決接收資料完整問題

類:QSerialPort 例程:Examples\Qt-5.9.1\serialport\terminal,該例子完美展示了qt串列埠收發過程,直接在這上面修改就可以得到自己的串列埠軟體。核心方法 //讀串列埠 QByteArray QSerialPo

即時通訊 資料離線接收的方法、客戶端及系統

  網路即時通訊(IM)工具發展到今天,已成為接收方普遍使用的通訊工具,逐漸成為網路接收方日常生活中必不可少的一部分。即時通 信工具不但在網路接收方的工作中使用,同樣也大量使用在網路接收 方的業餘生活中,接收方通過網路即時通訊工具可以實現與聯絡人及時有效的溝通。

如何解決分類問題樣本均衡問題

什麼是資料不均衡?在分類中,訓練資料不均衡是指不同類別下的樣本數目相差巨大。舉兩個例子:①在一個二分類問題中,訓練集中class 1的樣本數比上class 2的樣本數的比值為60:1。使用邏輯迴歸進行分類,最後結果是其忽略了class 2,將所有的訓練樣本都分類為class