通訊基礎小結
通訊連線實現:
(伺服器建立,客戶端連線,文字流傳送接收,執行緒實現群聊,客戶端介面)
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訊息
2.解析標記後的內容:private string readstring() throws ioexception
i = ins.read();
} // 在此處,轉化時必須使用gbk編碼,即讀到的訊息編碼為中文編格式,否則會亂碼
msg = new string(msg.getbytes("iso-8859-1"), "gbk").trim();
return msg;
}
static string getxmlvalue(string flagname, string xmlmsg) throws exception catch (exception ef)
}
功能擴充:(檔案傳輸,網路畫板,整合)
功能擴充就是傳送不同形式的資訊,如,檔案,或者遠端控制等,其本質還是流的相互收發,只是流封裝的內容不同,如最簡單的傳送直線,一次性傳送起始和終點的座標,畫筆粗細顏色等。接收發按照協議接收解析找一樣的順序畫出即可。
這裡舉傳送的檔案的例子,需要強調的是,為了緩解大檔案傳輸速度慢的問題,用包裝後的data流可以適當加快傳輸速率。
1.客戶端向伺服器傳送檔案:
2.伺服器**給某客戶端public void sendfile(string sender, string receiver, string path,string filename) catch (exception ef)
}
給某使用者傳送檔案資訊: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檔案中引入另乙個檔案,前者我們稱之為 父元件 而後者被引入的檔案我們稱之為 子元件 瀏覽前說明 本部落格分為兩大...
通訊小結之一
通訊小結之一 在前幾天開始敲及時通訊的 之前,我花了一天了解整個通訊需要哪些模組。又花了乙個下午設計我所需要的通訊系統的功能,我的整個通訊系統的流程,以及每個流程中需要發生哪些動作,會出現什麼問題,實現這些功能需要哪些類,每個類又需要什麼屬性,什麼方法,這些方法是要私有的還是公有的,這些類需不需要例...