<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                server ``` ?System.out.println("服務器?啟動.....??"); ??????? ?//?1.?創建服務端ServerSocket ?????? ServerSocket?serverSocket?=?new?ServerSocket(6666); ?? ?? //?2.?建立連接? ?????? ???????? Socket?accept?=?serverSocket.accept(); ?????? //?3.?創建流對象 ?? ?????? //?3.1?獲取輸入流,讀取文件數據 ?? ???????? BufferedInputStream?bis?=?new?BufferedInputStream(accept.getInputStream()); ??????? //?3.2?創建輸出流,保存到本地?. ?BufferedOutputStream?bos?=?new?BufferedOutputStream(new?FileOutputStream("copy.jpg")); //?4.?讀寫數據? ??????? ???????? byte[]?b?=?new?byte[1024?*?8]; ??????? int?len; ???????? while?((len?=?bis.read(b))?!=?‐1)?{ ???????????? bos.write(b,?0,?len); ??????? ?} ??????? //5.?關閉?資源 ???????? bos.close(); ??????? bis.close(); ???????? accept.close(); ???????? System.out.println("文件上傳已保存"); ``` ``` //?1.創建流對象 ???????? //?1.1?創建輸入流,讀取本地文件?? ? BufferedInputStream?bis??=?new?BufferedInputStream(new?FileInputStream("test.jpg")); ??????? ?//?1.2?創建輸出流,寫到服務端? ??????? ?Socket?socket?=?new?Socket("localhost",?6666); BufferedOutputStream???bos???=?new?BufferedOutputStream(socket.getOutputStream()); ? ??????? ?//2.寫出數據.? ?byte[]?b??=?new?byte[1024?*?8?]; ???????? int?len?;? ??????? ?while?((?len??=?bis.read(b))!=‐1)?{ ???????????? bos.write(b,?0,?len); ???????????? bos.flush(); ??????? } ???????? System.out.println("文件發送完畢"); ?????? ??//?3.釋放資源 ? ???????? bos.close();? ???????? socket.close(); bis.close();? ``` 文件上傳優化 ``` 1. 文件名稱寫死的問題 服務端,保存文件的名稱如果寫死,那么最終導致服務器硬盤,只會保留一個文件,建議使用系統時間優 化,保證文件名稱唯一 FileOutputStream?fis?=?new?FileOutputStream(System.currentTimeMillis()+".jpg")?//?文件名稱 BufferedOutputStream?bos?=?new?BufferedOutputStream(fis); ``` ``` 2. 循環接收的問題 服務端,指保存一個文件就關閉了,之后的用戶無法再上傳,這是不符合實際的,使用循環改進,可以不斷 的接收不同用戶的文件,代碼如下: //?每次接收新的連接,創建一個Socket while(true){ ????Socket?accept?=?serverSocket.accept(); ????...... } ``` ``` 3. 效率問題 服務端,在接收大文件時,可能耗費幾秒鐘的時間,此時不能接收其他用戶上傳,所以,使用多線程技術優 化,代碼如下: while(true){ ???? Socket?accept?=?serverSocket.accept(); ???? //?accept?交給子線程處理. ???? new?Thread(()?‐>?{ ?????? ...... ?? ????????InputStream?bis?=?accept.getInputStream(); ?????? ...... ?? ????}).start(); } ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看