隨筆 通訊學習相關

2021-09-25 12:45:08 字數 1499 閱讀 4093

最近學習了一些通訊相關的知識,遂來寫一寫部落格總結一下。

電腦中的資料在儲存時總是以位元組byte(二進位制的0/1)儲存的,同樣的,通過網際網路相連的計算機在進行資訊的傳送與接收時,也總是以位元組的形式將相關檔案或資訊打包處理。簡而言之就是,通過網際網路進行通訊的資訊總是位元組型別的。

就像資料儲存的方式一樣(連續存與非連續存),通訊也有兩種典型的方法(或者我們稱之為協議)與之很相像,可以稱之為面向連線的通訊以及面向非連線的通訊。

在闡述連線與非連線之前,先稍微了解一下協議是什麼。

稍微上網查詢一下就能翻到不少對於協議的定義。

百科上稱之為:通訊計算機雙方必須共同遵從的一組約定。或者說詳細點:在計算機網路中用於規定資訊的格式以及如何傳送和接收資訊的一套規則稱為網路協議或通訊協議。

簡單理解一下就是,由於網路傳輸基於位元組型別,當我們想要知道對方傳輸過來的資訊是什麼型別(還是文字等)、具體哪些部分才是檔案的位元組、有一些檔案很大導致傳輸可能需要拆成幾次傳送等、甚至是有無加密等等就很麻煩,這時候就需要兩邊協商好傳送資訊的格式,根據協議來編碼,通過**實現將位元組按照通訊協議轉成相應資訊,這樣在處理資訊時才能做到準確。而協商的具體內容就可以說是協議的一部分了。

回到之前提到的兩類典型通訊協議:面向連線的通訊與面向非連線的通訊。

其中前者的典例為tcp,後者則是udp。

這時候就很容易能夠理解這兩類的特性了。面向連線的通訊,顧名思義就是傳送端與接收端之間會建立乙個通道,相對的,面向非連線的通訊,便不會建立這個通道。顯然,有通道保障的面向連線的通訊,可以保證資料傳輸的可靠性,也就是說不會丟資料(類似打**),但是效率低(要等),與之相對的面向非連線的通訊,雖然並不會保證傳輸的可靠性,也就是說存在丟包(資料)的問題(類似發簡訊),但是效率高(發了就丟,不管是否接收到,不需要等)。於是在使用時,往往根據使用環境的特性決定使用哪種型別的通訊協議:對時間敏感時適用tcp,對時間不敏感時適用udp。

如此,在**中實現同一wifi下的兩台計算機進行資訊傳輸,需要互相的ip位址以及埠。其中ip可以通過cmd指令(ipconfig)查到,埠需要事先協商好。

public class udp 

return udp;

} private udp() catch (exception e)

} public void receive()

} catch (ioexception e)

} //處理檔案

public void handlerecvdata(byte bytes)

public void send(byte bytes) catch (exception e)

}}

需注意,在**實現過程中不是只有單例項化這乙個解決埠被重複占用問題的方法。

此外,udp在接收時會由於在收到訊息前一直被阻塞的特性導致程式執行不下去,此處解決方法是考慮採用future來停止執行緒等。

再然後便是丟包的問題。前面提到udp型別協議容易造成丟包問題,這裡的解決方案在解決完阻塞問題之後便能夠迎刃而解了,不過也需要事先協商好怎麼個確認法。

學習隨筆 網路相關知識

區域網 local area network lan 區域網的覆蓋範圍一般是方圓幾千公尺之內,其具備的安裝便捷 成本節約 擴充套件方便等特點使其在各類辦公室內運用廣泛。區域網自然就是區域性地區形成的乙個區域網路,其特點就是分布地區範圍有限,可大可小,大到一棟建築樓 與相鄰建築之間的連線,小到可以是辦...

Socket通訊隨筆

1 伺服器與同乙個客戶端可以同時建立多個socket,而且每個socket有唯一標識。如python程式1與python程式2同時建立多個socket 實驗結果如下 注意 上面兩張圖為同一次輸出結果,圖太大了,分兩次截。上面的,顯示了python程式1接收到的三次socket連線的socket列印值...

串列埠通訊隨筆

之前了做了個串列埠通訊的專案,主要用到 serialport類 這裡主要說說幾個問題 1.在關閉串列埠的時候軟體容易卡死的問題.我們在使用serialport類開啟串列埠時候,會開乙個接收資料的執行緒來接收從串列埠傳送過來的資料,也可以開個呼叫serialport類的事件datareceived 我...