|
TCP & UDP TCP網路傳輸
資料傳輸的量設為一次2048 byte,為了防止沒有資料可傳時做傳送的動作,浪費資源 或造成錯誤,使用兩個counter宣告成外部變數,在傳輸前先做比較,防止不必要的傳 輸造成。在Server端如果encoder的檔案還沒壓好,而網路的部分就開始做傳輸動作,而 造成錯誤,同樣的在Client撥放地方也要做這種機制,用兩個外部變數counter去做 撥放和接收的比較,防止接收的速度來不及 : 沒有新的資料可以撥放,而decoder做 撥放的動作,造成錯誤。 while(file_read==file_write) sleep(1); while(doq==1)
sleep(1);
file_read++;
client接收端開始時檔案寫入counter(file_write)等於0,每經過一次的接收2048 byte做 file_write++的動作,將計數器加一,而撥放計數器(file_read) ,每撥完一次2048 byte, 同樣加一。寫入檔案counter(file_write)等於接收撥放counter(file_read) ,代表沒有新的檔 案進來,可以供撥放,則sleep一秒等待有新的檔案寫入再撥放,直到file_ write >file_read 代表有新進的資料,才可以去執行撥放的動作。同時這種機制也可以讓我們實現撥放暫 停功能,可以由一個外部變數doq的值來決定是否要讓撥放器變成暫停的狀態,例如我們 讓一個按鍵按下之後,doq值等於1,而doq=1的狀況也會讓撥放器sleep一秒,不斷sleep 直到doq等於一的狀況被解開,才讓撥放器繼續做撥放的動作。
UDP網路傳輸
封包的類型 完整成功的監控系統中,UDP會傳輸四種溝通的封包 ,了解對方的情況和狀態, 作為Server端和Client端之間的溝通的橋樑,這四個封包分別是起始封包,使用者 名稱和密碼的封包,傳輸開始封包,結束監聽的封包。因此可以傳一個暗語和對方 比對,例如起始封包,可以連傳2048個0做暗號,代表他在準備開始監聽的狀態, 將自己的狀態告訴對方。前三個封包如果只要有錯誤,Server端會關掉socket, return回起始監控的bind的狀況,而Client端也會關掉socket,並且離開網路傳輸 的執行緒。前三個封包都正確,則Server端會打開encoder壓檔案和檔案傳輸,而 Client端會開啟執行緒去執行接收檔案連結的動作。
|