Social Icons

twitterfacebookgoogle plusrss feedemail

5/27/2013

JAVA 網路程式-基本的Client & Server 檔案傳送

因為有人來問我JAVA版的網路程式要怎麼寫,所以這邊就稍微解釋一下簡單的JAVA檔案傳送!
程式可以用來傳送文字檔、影片檔...等檔案,但是在網路不穩定時會出問題唷~
因為這只是簡單的範例程式,想要更進一步請參考檔案傳送與效能分析
server

client


客戶端 client
import java.io.*;
 
import java.net.*;
 
public class Client{
 
    public static void main(String[] args)throws Exception{
 
        //使用本地文件系統接受網絡數據並存為新文件
     String filename="newFile.mp4";
        int port=8080;

 
        // 通過Socket連接文件服務器
        System.out.println("準備連接server端");
        Socket server=null;
        try {
         server=new Socket(InetAddress.getLocalHost(),port);
        } catch (java.io.IOException e) {
          System.out.println("與Server連線失敗,可能是Server尚未開啟");
          System.out.println("錯誤訊息IOException :" + e.toString());
          System.out.println("\n關閉程式");
          return;
        }
        System.out.println("連線成功");
 
        //創建網絡接受流接受服務器文件數據 
        System.out.println("準備接收檔案");
        InputStream netIn=server.getInputStream();
 
     System.out.println("接收檔案的新檔名為:"+filename);
        File file=new File(filename);//生成的文件名
        file.createNewFile();
        
        InputStream in=new DataInputStream(new BufferedInputStream(netIn));
        RandomAccessFile raf=new RandomAccessFile(file,"rw");
 
        //創建緩衝區緩衝網絡數據
        System.out.println("開始接收檔案");
        byte[] buf=new byte[2048];
 
        int num=in.read(buf);         
 
        while(num!=(-1)){//是否讀完所有數據
 
              raf.write(buf,0,num);//將數據寫往文件
 
              raf.skipBytes(num);//順序寫文件字節
 
              num=in.read(buf);//繼續從網絡中讀取文件
 
        }
        System.out.println("接收檔案完成");
        in.close();
 
        raf.close();
 
    }
}

伺服端 server
import java.io.*;
 
import java.net.*;
 
public class FileServer{
 
    public static void main(String[] args)throws Exception{
 
       
        String filename="18.mp4";//文件名,要傳輸的文件
        int port=8080;
       
        File file=new File(filename); 
        System.out.println("準備傳送"+filename+"檔案");
        //檢查是否有此檔案
        FileInputStream fos=null;
        try {
            fos=new FileInputStream(file);
        } catch (java.io.IOException e) {
         System.out.println("找不到檔案"+filename);
         System.out.println("錯誤訊息IOException :" + e.toString());
         System.out.println("\n關閉程式");
      return;
       }
        //創建Server 接受客戶請求
        //默認port=8080
        System.out.println("等待 client連線");
        ServerSocket ss=new ServerSocket(port);
 
        Socket client=ss.accept();
        System.out.println("Client 連線進來");
        
        //數據封裝
        System.out.println("準備發送檔案");
        OutputStream netOut=client.getOutputStream();
 
        OutputStream temp=new DataOutputStream(new BufferedOutputStream(netOut));
 
        //創建文件讀取緩衝區
        System.out.println("開始傳送檔案");
        byte[] buf=new byte[2048];
 
        int num=fos.read(buf);
 
        while(num!=(-1)){//是否讀完文件
          temp.write(buf,0,num);//把文件數據寫出網絡緩衝區 
         temp.flush();//刷新緩衝區把數據寫往客戶端
            num=fos.read(buf);//繼續從文件中讀取數據
         }
        System.out.println("傳送檔案完成");
        fos.close(); 
        temp.close();
    }
}


程式碼專案下載:(因內含測試用影片所以檔案較大)
載點1
載點2

未含影片檔案程式碼下載
載點1
載點2


沒有留言:

張貼留言

俗話說
凡走過必留下痕跡,凡住過必留下鄰居
凡爬過必留下樓梯,凡來過必留下IP
看過文章之後歡迎留下您寶貴的意見喔!

 
 
无觅相关文章插件,迅速提升网站流量