當我第一次接觸它時,我以為它是網絡編程部分。學了之后,我發現他也是Java的一門課。只是它與TCP協議掛鉤。在使用網絡和協議問題,以及每個應用的對應端口時,當服務器或客服通過網絡接收到信息時,會先根據IP地址找到對應的位置,然后通過端口檢索應用。在DOS窗口下輸入相應的網絡信息。網關,顧名思義,就是網絡門。當您鏈接路由器時,它是一個網關。IPV4:您的計算機地址如下。這些簡單的硬件知識對程序員來說不算什么。對于七層協議,沒有太多的描述,百度有。只需說出它在哪里。應用程序-傳輸-網絡-物理(在應用程序和傳輸層之間)。
讓我們進入正題,如何用它編寫聊天程序。
第 1 步:聊天必須在兩個或更多人之間進行,因此應用程序應包含客戶端和服務器端口??蛻舳藢⑾嚓P信息寫入服務器。(當然,這是基于網絡已經連接的前提下,至于如何連接,后面會繼續描述)。服務器相當于服務器,用于處理數據。
如圖所示是一個簡單的聊天模型??蛻舳丝梢詫⑾嚓P數據寫入服務器,當然服務器也可以向客戶端發送一些數據,這是互連的。
第二步:了解簡單的施工模型,就可以根據需要進行開發。第一種是寫服務器,只要服務器在服務器啟動時能得到客戶端的地址,兩者就可以建立通信,這就需要使用Socke中的相關方法。首先是定義相關端口。如下圖所示,這是一種在端口中傳遞的構造方法。整數類型。這就像定義未使用的端口一樣簡單。例如,定義 1 = 新 (8000);我們通過其對象調用相關方法。通過調用 ();接受代理發送的端口信息。 = .();這句話的意思是接受類的變量。這個變量可以稱為chat();方法。與服務程序相比,讀寫客戶端的輸入信息應使用輸入流,即。根據相關的IO知識編寫程序。(在編寫程序時,應該比較更多的 API 文檔,總共只有這兩個類,其中的方法并不多。)
步驟3:寫入相應的服務器。下一步是編寫客戶端
要通過類完成對應的客戶端寫入,與服務器通信的第一步是對應端口號,寫入服務器的地址。 final = new (“192.168.1.107”, 8000);請注意,端口號對應于端口號。否則,它將無法連接。連接好這個連接后,剩下的就是邏輯問題,可以慢慢解決。在這兩個類中,還有自由相關的方法和屬性。這根據業務需求而增加。
第 4 步:開發這樣一個簡單的聊天工具所使用的知識的初步估計是:異常、IO 流、集合、多線程、面向對象的基本思想、類使用。最常用的是 IO 流。因為涉及到對應的讀寫操作,所以集合是第二個,集合是聊天室的成員。建議使用映射值對的集合。當然,不用說,IO端口肯定會引發異常。如果你真的能認真地編寫這個程序,那么Java的基礎部分就可以畢業了。(我個人理解,因為聊天程序還包括私人聊天功能,多個用戶共同操作單個服務器)。經過不懈努力,解決問題后終于完成了基礎功能,輸入用戶名作為用戶注冊,就可以通過@xxx lll與某人私聊,即別人看不到你們之間的聊天記錄。
第五步:總結開發過程中遇到的一些問題,即解決方案。
1:當客戶端輸入一行文本時,發現服務器沒有響應,搜索的各個方面都沒有問題。后來發現打印輸出中的句子在外面嘗試。這意味著服務器一直在監聽客戶端的信息,等待客服輸入結束,但這是一個無限循環,無法結束,所以一直無法跳出這個范圍,也無法顯示信息,然后將句子移到括號內完成。它以紅色顯示,如下圖所示。
try {
ClientsManager cm = new ClientsManager();
cm.addClient(socket);
input = socket.getInputStream();
br = new BufferedReader(new InputStreamReader(input, "utf-8"));
String msg;
while (null != (msg = br.readLine())) {
System.out.println(msg);
}
2.當一個客戶端有連接時,你會發現其他客戶端無法連接...怎么了?問題出在 main 方法內部,該方法從上到下執行,是一個線程。當其他用戶連接時,無法再次執行該線程。解決這個問題的方法是創建一個新線程,執行時,多個線程一起執行而不會相互干擾。
new Thread(new Runnable() {
public void run() {
try {
writeMsg(socket);
} catch(Exception e) {
e.printStackTrace();
}
}
}).start();
new Thread(new Runnable() {
public void run() {
readMsg(socket);
}
}).start();
如紅色代碼所示。使用匿名內部類 new(){} 創建一個新線程來創建一個實例。運行();該方法執行對服務器的寫入。();是讀取服務器的操作。
3:
上報異常時,如圖所示,異常是并發的。代碼不渲染,上圖所示為解決方法,此并發異常是指遍歷集合時刪除集合的操作,使用不是迭代器,系統默認為并發修改異常,然后報錯。為什么刪除它,因為用戶在完成鍵入時關閉,并且在關閉時需要將其刪除。防止系統報告錯誤。處理并發問題時,使用鎖。鎖定對象是沒有用的,必須鎖定字節碼。并使用特定于迭代器的 ();刪除它的方法。
由于
時間有限,細節太多要寫,簡單寫在這里,源碼可以參考以下URL(個人代碼庫,采用SVNG管理)。