乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Java基于socket文件傳輸示例

       zhanghuan 2007-11-12
                                                    Java基于Socket文件傳輸示例

      最近需要進(jìn)行網(wǎng)絡(luò)傳輸大文件,于是對基于socket的文件傳輸作了一個(gè)初步的了解。在一位網(wǎng)友提供的程序基礎(chǔ)上,俺進(jìn)行了一些加工,采用了緩沖輸入/輸出流來包裝輸出流,再采用數(shù)據(jù)輸入/輸出輸出流進(jìn)行包裝,加快傳輸?shù)乃俣?。廢話少說,先來看服務(wù)器端的程序。

      1.服務(wù)器端

      package sterning;

      import java.io.BufferedInputStream;
      import java.io.DataInputStream;
      import java.io.DataOutputStream;
      import java.io.File;
      import java.io.FileInputStream;
      import java.net.ServerSocket;
      import java.net.Socket;

      public class ServerTest {
          
      int port = 8821;

          
      void start() {
              Socket s 
      = null;
              
      try {
                  ServerSocket ss 
      = new ServerSocket(port);
                  
      while (true{
                      
      // 選擇進(jìn)行傳輸?shù)奈募?/span>
                      String filePath = "D:\\lib.rar";
                      File fi 
      = new File(filePath);

                      System.out.println(
      "文件長度:" + (int) fi.length());

                      
      // public Socket accept() throws
                      
      // IOException偵聽并接受到此套接字的連接。此方法在進(jìn)行連接之前一直阻塞。

                      s 
      = ss.accept();
                      System.out.println(
      "建立socket鏈接");
                      DataInputStream dis 
      = new DataInputStream(new BufferedInputStream(s.getInputStream()));
                      dis.readByte();

                      DataInputStream fis 
      = new DataInputStream(new BufferedInputStream(new FileInputStream(filePath)));
                      DataOutputStream ps 
      = new DataOutputStream(s.getOutputStream());
                      
      //將文件名及長度傳給客戶端。這里要真正適用所有平臺(tái),例如中文名的處理,還需要加工,具體可以參見Think In Java 4th里有現(xiàn)成的代碼。
                      ps.writeUTF(fi.getName());
                      ps.flush();
                      ps.writeLong((
      long) fi.length());
                      ps.flush();

                      
      int bufferSize = 8192;
                      
      byte[] buf = new byte[bufferSize];

                      
      while (true{
                          
      int read = 0;
                          
      if (fis != null{
                              read 
      = fis.read(buf);
                          }


                          
      if (read == -1{
                              
      break;
                          }

                          ps.write(buf, 
      0, read);
                      }

                      ps.flush();
                      
      // 注意關(guān)閉socket鏈接哦,不然客戶端會(huì)等待server的數(shù)據(jù)過來,
                      
      // 直到socket超時(shí),導(dǎo)致數(shù)據(jù)不完整。                
                      fis.close();
                      s.close();                
                      System.out.println(
      "文件傳輸完成");
                  }


              }
       catch (Exception e) {
                  e.printStackTrace();
              }

          }


          
      public static void main(String arg[]) {
              
      new ServerTest().start();
          }

      }


      2.socket的Util輔助類

      package sterning;

      import java.net.*;
      import java.io.*;

      public class ClientSocket {
          
      private String ip;

          
      private int port;

          
      private Socket socket = null;

          DataOutputStream out 
      = null;

          DataInputStream getMessageStream 
      = null;

          
      public ClientSocket(String ip, int port) {
              
      this.ip = ip;
              
      this.port = port;
          }


          
      /**
           * 創(chuàng)建socket連接
           * 
           * 
      @throws Exception
           *             exception
           
      */

          
      public void CreateConnection() throws Exception {
              
      try {
                  socket 
      = new Socket(ip, port);
              }
       catch (Exception e) {
                  e.printStackTrace();
                  
      if (socket != null)
                      socket.close();
                  
      throw e;
              }
       finally {
              }

          }


          
      public void sendMessage(String sendMessage) throws Exception {
              
      try {
                  out 
      = new DataOutputStream(socket.getOutputStream());
                  
      if (sendMessage.equals("Windows")) {
                      out.writeByte(
      0x1);
                      out.flush();
                      
      return;
                  }

                  
      if (sendMessage.equals("Unix")) {
                      out.writeByte(
      0x2);
                      out.flush();
                      
      return;
                  }

                  
      if (sendMessage.equals("Linux")) {
                      out.writeByte(
      0x3);
                      out.flush();
                  }
       else {
                      out.writeUTF(sendMessage);
                      out.flush();
                  }

              }
       catch (Exception e) {
                  e.printStackTrace();
                  
      if (out != null)
                      out.close();
                  
      throw e;
              }
       finally {
              }

          }


          
      public DataInputStream getMessageStream() throws Exception {
              
      try {
                  getMessageStream 
      = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
                  
      return getMessageStream;
              }
       catch (Exception e) {
                  e.printStackTrace();
                  
      if (getMessageStream != null)
                      getMessageStream.close();
                  
      throw e;
              }
       finally {
              }

          }


          
      public void shutDownConnection() {
              
      try {
                  
      if (out != null)
                      out.close();
                  
      if (getMessageStream != null)
                      getMessageStream.close();
                  
      if (socket != null)
                      socket.close();
              }
       catch (Exception e) {

              }

          }

      }


      3.客戶端

      package sterning;

      import java.io.BufferedOutputStream;
      import java.io.DataInputStream;
      import java.io.DataOutputStream;
      import java.io.FileOutputStream;

      public class ClientTest {
          
      private ClientSocket cs = null;

          
      private String ip = "localhost";// 設(shè)置成服務(wù)器IP

          
      private int port = 8821;

          
      private String sendMessage = "Windwos";

          
      public ClientTest() {
              
      try {
                  
      if (createConnection()) {
                      sendMessage();
                      getMessage();
                  }


              }
       catch (Exception ex) {
                  ex.printStackTrace();
              }

          }


          
      private boolean createConnection() {
              cs 
      = new ClientSocket(ip, port);
              
      try {
                  cs.CreateConnection();
                  System.out.print(
      "連接服務(wù)器成功!" + "\n");
                  
      return true;
              }
       catch (Exception e) {
                  System.out.print(
      "連接服務(wù)器失敗!" + "\n");
                  
      return false;
              }


          }


          
      private void sendMessage() {
              
      if (cs == null)
                  
      return;
              
      try {
                  cs.sendMessage(sendMessage);
              }
       catch (Exception e) {
                  System.out.print(
      "發(fā)送消息失敗!" + "\n");
              }

          }


          
      private void getMessage() {
              
      if (cs == null)
                  
      return;
              DataInputStream inputStream 
      = null;
              
      try {
                  inputStream 
      = cs.getMessageStream();
              }
       catch (Exception e) {
                  System.out.print(
      "接收消息緩存錯(cuò)誤\n");
                  
      return;
              }


              
      try {
                  
      //本地保存路徑,文件名會(huì)自動(dòng)從服務(wù)器端繼承而來。
                  String savePath = "E:\\";
                  
      int bufferSize = 8192;
                  
      byte[] buf = new byte[bufferSize];
                  
      int passedlen = 0;
                  
      long len=0;
                  
                  savePath 
      += inputStream.readUTF();
                  DataOutputStream fileOut 
      = new DataOutputStream(new BufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath))));
                  len 
      = inputStream.readLong();
                  
                  System.out.println(
      "文件的長度為:" + len + "\n");
                  System.out.println(
      "開始接收文件!" + "\n");
                          
                  
      while (true{
                      
      int read = 0;
                      
      if (inputStream != null{
                          read 
      = inputStream.read(buf);
                      }

                      passedlen 
      += read;
                      
      if (read == -1{
                          
      break;
                      }

                      
      //下面進(jìn)度條本為圖形界面的prograssBar做的,這里如果是打文件,可能會(huì)重復(fù)打印出一些相同的百分比
                      System.out.println("文件接收了" +  (passedlen * 100/ len) + "%\n");
                      fileOut.write(buf, 
      0, read);
                  }

                  System.out.println(
      "接收完成,文件存為" + savePath + "\n");

                  fileOut.close();
              }
       catch (Exception e) {
                  System.out.println(
      "接收消息錯(cuò)誤" + "\n");
                  
      return;
              }

          }


          
      public static void main(String arg[]) {
              
      new ClientTest();
          }

      }

      這就實(shí)現(xiàn)了從服務(wù)器端向客戶端發(fā)送文件的過程,當(dāng)然,反過來,也一樣.稍有不同.代碼中對跨平臺(tái)的細(xì)節(jié)沒有實(shí)現(xiàn),有時(shí)間或興趣的朋友可以提供一下.

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多