通訊基礎小結

2021-09-01 13:05:49 字數 2647 閱讀 6882

通訊基礎小結

通訊連線實現:

(伺服器建立,客戶端連線,文字流傳送接收,執行緒實現群聊,客戶端介面)

1.serversocket和socket類

使用serversocket server=new serversocket(port)語句在指定埠建立伺服器,等待客戶機的連線。

通過cmd輸入伺服器的ip和埠號即連上伺服器。

若要實現群聊,即多個客戶端同時連上伺服器,即避免accept()方法的阻塞,可以為每位客戶端建立單獨的執行緒。

2.文字傳輸

由socket物件得到input和output流,以回車作為一句聊天語句的結束標誌,「bye「為結束聊天的標誌對流進行寫入和讀取操作。

3.客戶端介面實現:代替cmd,建立登入和聊天介面,視覺化。

經分析,客戶端與伺服器基本功能既不能一致,即建立socket物件,連線上上伺服器,按照伺服器收發資訊流的方法同樣接收於傳送文字。

協議初識:(協議概念提出,實現xmpp協議)

1.協議概念:

讓不同地理位置的通訊系統,協同工作實現資訊交換和資源共享的一種共同語言。它定義了乙個讓交流雙方共同遵守的規則。這就是協議。簡單說,交流什麼,怎樣交流。怎麼樣把計算機最底層的資料流分割,按照怎樣的協議把一串串無規律的0,1傳翻譯成資訊。

2.xmpp協議:

上面我們自定義的簡單協議可以實現簡單的文字聊天功能,但明顯存在很多缺陷。所以便提出xmpp協議。

所謂xmpp協議,即the extensible messaging and presence protocol(可擴充套件通訊和表示協議).它是基於xml(可擴充套件標記語言)的。

其核心就是把每條資訊用<>這樣成對出現的括號把信心封裝起來,讀取時解析即可。

如:1.登入請求:

login

user

password

2.登入應答:

loginresp

登入結果

3.聊天資訊:

chat

sender

receiver

訊息內容

4.註冊訊息

5.註冊應答

7.上線訊息

8.下線訊息

9.傳送檔案

10.傳送

等等。。。。

這種方式的擴充套件性很強,不論是傳送什麼型別的資訊,都可以把標記值按照此方式封裝。不會丟失,處理方式很簡便統一。

解析方法包括重要的兩部分:

1.從流中讀取並解析出一條xml訊息

private string readstring() throws ioexception 

i = ins.read();

} // 在此處,轉化時必須使用gbk編碼,即讀到的訊息編碼為中文編格式,否則會亂碼

msg = new string(msg.getbytes("iso-8859-1"), "gbk").trim();

return msg;

}

2.解析標記後的內容:

static string getxmlvalue(string flagname, string xmlmsg) throws exception  catch (exception ef) 

}

功能擴充:(檔案傳輸,網路畫板,整合)

功能擴充就是傳送不同形式的資訊,如,檔案,或者遠端控制等,其本質還是流的相互收發,只是流封裝的內容不同,如最簡單的傳送直線,一次性傳送起始和終點的座標,畫筆粗細顏色等。接收發按照協議接收解析找一樣的順序畫出即可。

這裡舉傳送的檔案的例子,需要強調的是,為了緩解大檔案傳輸速度慢的問題,用包裝後的data流可以適當加快傳輸速率。

1.客戶端向伺服器傳送檔案:

public void sendfile(string sender, string receiver, string path,string filename)  catch (exception ef) 

}

2.伺服器**給某客戶端

private void processchat(socket client) throws exception else if(type.equals("file"))

}} }

給某使用者傳送檔案資訊:

public static void castfile(string username,string msg,string destusername)

if (type.equals("file")) else if (state == 0)

}

讀取檔案內容的方法:

private void readfilecontent(int filedatalen, string filename,string path)  catch (ioexception e)

深入了解:(阻塞,執行緒非同步問題,nio模式——mina框架)

專案開發: ——————————未完待續!

IPC通訊小結

各種工具的比較 無名管道 只能用於親緣程序通訊 有名管道 可用於任意兩程序間通訊,但只能傳輸流資料 緩衝區大小受限 訊息佇列 可以傳輸有格式位元組流,但是效率低 系統呼叫產生的使用者空間 核心空間轉換的開銷 共享記憶體 通訊效率最高最快,解決了程序間通訊執行效率低等開銷問題,但是可能會帶來同步問題 ...

vue元件通訊 小結

本部落格主要是歸類一下vue元件之間的通訊交流,即 父元件如何呼叫子元件中宣告的變數 函式 和 子元件中如何呼叫父元件中宣告的變數 函式。父元件和子元件是相互存在 相互依賴的,即是在vue檔案中引入另乙個檔案,前者我們稱之為 父元件 而後者被引入的檔案我們稱之為 子元件 瀏覽前說明 本部落格分為兩大...

通訊小結之一

通訊小結之一 在前幾天開始敲及時通訊的 之前,我花了一天了解整個通訊需要哪些模組。又花了乙個下午設計我所需要的通訊系統的功能,我的整個通訊系統的流程,以及每個流程中需要發生哪些動作,會出現什麼問題,實現這些功能需要哪些類,每個類又需要什麼屬性,什麼方法,這些方法是要私有的還是公有的,這些類需不需要例...