Java實現(xiàn)Socket網(wǎng)絡(luò)編程(三)

在看到本文之前,如果讀者沒看過筆者的前文Java實現(xiàn)Socket網(wǎng)絡(luò)編程(二) ,請先翻閱。

下面,我們來實現(xiàn)服務(wù)器接收子線程:

       // 信息接收流
       BufferedReader brIn = null;
       // 使用"GBK"編碼讀取中文
       brIn = new BufferedReader(new InputStreamReader(
            mSocket.getInputStream(), "GBK"));
       for (int c = brIn.read(); c != -1; c = brIn.read()) {
            ServerMain.jtaReceivedMessage.append((char) c + "");
            // 滾動到底端
            ServerMain.jtaReceivedMessage
                            .setCaretPosition(ServerMain.jtaReceivedMessage
                                    .getText().length());               
       }

Java輸入輸出,要采用流的方式,即InputStream和OutputStream,筆者采用了”GBK“編碼讀取中文,當(dāng)然也可以采用”UTF-8“編碼,在讀取信息過程中,邊讀取邊把內(nèi)容添加到可視區(qū)域(服務(wù)器接收框),并使接收框自動滾動,滑動到最新的數(shù)據(jù)顯示位置。

值得注意的是,這個for循環(huán)是一個死循環(huán),除非發(fā)生讀寫錯誤被捕獲到(Catch IOException),否則循環(huán)不能結(jié)束。因此,不能把”接收到的信息添加到可視區(qū)域“這個步驟放置到for循環(huán)外,否則會導(dǎo)致”怎么讀取不到數(shù)據(jù)“這樣的問題而開發(fā)者又無法察覺。如果要控制顯示格式,也要在for循環(huán)內(nèi)進行或?qū)邮諗?shù)據(jù)本身進行處理。

接下來,我們實現(xiàn)服務(wù)器向客戶端”say hello“

       OutputStreamWriter outstream = null;
       // 將信息發(fā)送給客戶端
       try {
                outstream = new OutputStreamWriter(
                clientSocket.getOutputStream(), "GBK");
                outstream.write(message);
                outstream.flush();
       } catch (IOException e1) {
                if (outstream != null)
                    outstream.close();
                e1.printStackTrace();
         }

在讀寫過程中,要采用相同的編碼,這里筆者同樣采用”GBK“。使用OutputStream的flush()方法,這是為了避免使用緩沖區(qū)時,當(dāng)輸出的數(shù)據(jù)大小小于緩沖區(qū)大小時,系統(tǒng)不會進行”等緩沖區(qū)滿再發(fā)送數(shù)據(jù)“的操作,而是直接把緩沖區(qū)的數(shù)據(jù)發(fā)送出去,避免客戶端有”數(shù)據(jù)接收延時“的感覺。

在實現(xiàn)完服務(wù)器后,客戶端也同樣要建立接收信息的線程,并向服務(wù)器”say hello!“,由于代碼類似,此處筆者為了節(jié)省篇幅,就不粘貼代碼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 計算機網(wǎng)絡(luò)概述 網(wǎng)絡(luò)編程的實質(zhì)就是兩個(或多個)設(shè)備(例如計算機)之間的數(shù)據(jù)傳輸。 按照計算機網(wǎng)絡(luò)的定義,通過一定...
    蛋炒飯_By閱讀 1,369評論 0 10
  • 一、基礎(chǔ)知識:1、JVM、JRE和JDK的區(qū)別:JVM(Java Virtual Machine):java虛擬機...
    殺小賊閱讀 2,565評論 0 4
  • 年初喜迎捷報,在與瑞昌亞東激烈競爭搶奪中成功開發(fā)武寧縣大洞鄉(xiāng)敬老院新建項目,并得到該項目獨供權(quán)。
    民用黃石片區(qū)羅文閱讀 288評論 0 0
  • 滿屋子油漆味、甲醛味,所有窗戶盡可能開著,油漆甲醛味似乎淡了些,一陣風(fēng)吹來,含著油漆甲醛味,臨窗而坐,似乎放心點、...
    春暖花開時讀書閱讀 150評論 0 0
  • 人的一生會經(jīng)歷很多的轉(zhuǎn)折、挫折,有失意仿徨、困難挫敗,也會有大悲大喜、大起大落。我們常常會在經(jīng)歷生死離別后忽然參透...
    椰子尼閱讀 454評論 0 0

友情鏈接更多精彩內(nèi)容