• <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>
  • 推廣 熱搜: csgo  vue  angelababy  2023  gps  新車  htc  落地  app  p2p 

    Socket編寫一個簡易的聊天室(相關知識點的總結)

       2023-08-21 網絡整理佚名1560
    核心提示:這些簡單的硬件知識,對于程序員來說不算什么。第二步:知道了簡單構建模型,可以按照需求進行開發。在根據相關的IO知識編寫程序。通過類來完成相應的客戶端編寫,要與服務端通信,第一步就是把端口號對應上,并且把服務器的地址寫上。因為涉及到相應的讀寫操作,集合次之,集合是存放聊天室的成員的。(個人理解,因為聊天程序還包括私聊功能,多個用戶共同操作一個服務器)。

    當我第一次接觸它時,我以為它是網絡編程部分。學了之后,我發現他也是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管理)。

     
    標簽: socket通信
    反對 0舉報 0 收藏 0 打賞 0評論 0
     
    更多>同類資訊
    推薦圖文
    推薦資訊
    點擊排行
    網站首頁  |  關于我們  |  聯系方式  |  使用協議  |  版權隱私  |  網站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  RSS訂閱  |  違規舉報
    Powered By DESTOON
     
    三级精品影视国产,欧美乱伦免费综合,亚洲a在线中文,人妻色综合网站
  • <center id="q6uyy"><td id="q6uyy"></td></center>
    <dd id="q6uyy"></dd>