當前位置:編程學習大全網 - 源碼下載 - java中如何實現從客戶端發送文件到服務器端?

java中如何實現從客戶端發送文件到服務器端?

服務器端源碼:\x0d\import java.io.BufferedReader;\x0d\import java.io.File;\x0d\import java.io.FileNotFoundException;\x0d\import java.io.FileOutputStream;\x0d\import java.io.IOException;\x0d\import java.io.InputStream;\x0d\import java.io.InputStreamReader;\x0d\import java.net.ServerSocket;\x0d\import java.net.Socket;\x0d\\x0d\/**\x0d\ *\x0d\ * 文件名:ServerReceive.java\x0d\ * 實現功能:作為服務器接收客戶端發送的文件\x0d\ *\x0d\ * 具體實現過程:\x0d\ * 1、建立SocketServer,等待客戶端的連接\x0d\ * 2、當有客戶端連接的時候,按照雙方的約定,這時要讀取壹行數據\x0d\ * 其中保存客戶端要發送的文件名和文件大小信息\x0d\ * 3、根據文件名在本地創建文件,並建立好流通信\x0d\ * 4、循環接收數據包,將數據包寫入文件\x0d\ * 5、當接收數據的長度等於提前文件發過來的文件長度,即表示文件接收完畢,關閉文件\x0d\ * 6、文件接收工作結束\x0d\\x0d\public class ServerReceive {\x0d\ \x0d\ public static void main(String[] args) {\x0d\ \x0d\ /**與服務器建立連接的通信句柄*/\x0d\ ServerSocket ss = null;\x0d\ Socket s = null;\x0d\ \x0d\ /**定義用於在接收後在本地創建的文件對象和文件輸出流對象*/\x0d\ File file = null;\x0d\ FileOutputStream fos = null;\x0d\ \x0d\ /**定義輸入流,使用socket的inputStream對數據包進行輸入*/\x0d\ InputStream is = null;\x0d\ \x0d\ /**定義byte數組來作為數據包的存儲數據包*/\x0d\ byte[] buffer = new byte[4096 * 5];\x0d\ \x0d\ /**用來接收文件發送請求的字符串*/\x0d\ String comm = null;\x0d\\x0d\/**建立socekt通信,等待服務器進行連接*/\x0d\ try {\x0d\ ss = new ServerSocket(4004);\x0d\ s = ss.accept();\x0d\ } catch (IOException e) {\x0d\ e.printStackTrace();\x0d\ }\x0d\\x0d\/**讀取壹行客戶端發送過來的約定信息*/\x0d\ try {\x0d\ InputStreamReader isr = new InputStreamReader(s.getInputStream());\x0d\ BufferedReader br = new BufferedReader(isr);\x0d\ comm = br.readLine();\x0d\ } catch (IOException e) {\x0d\ System.out.println("服務器與客戶端斷開連接");\x0d\ }\x0d\ \x0d\ /**開始解析客戶端發送過來的請求命令*/\x0d\ int index = comm.indexOf("/#");\x0d\ \x0d\ /**判斷協議是否為發送文件的協議*/\x0d\ String xieyi = comm.substring(0, index);\x0d\ if(!xieyi.equals("111")){\x0d\ System.out.println("服務器收到的協議碼不正確");\x0d\ return;\x0d\ }\x0d\ \x0d\ /**解析出文件的名字和大小*/\x0d\ comm = comm.substring(index + 2);\x0d\ index = comm.indexOf("/#");\x0d\ String filename = comm.substring(0, index).trim();\x0d\ String filesize = comm.substring(index + 2).trim();\x0d\\x0d\/**創建空文件,用來進行接收文件*/\x0d\ file = new File(filename);\x0d\ if(!file.exists()){\x0d\ try {\x0d\ file.createNewFile();\x0d\ } catch (IOException e) {\x0d\ System.out.println("服務器端創建文件失敗");\x0d\ }\x0d\ }else{\x0d\ /**在此也可以詢問是否覆蓋*/\x0d\ System.out.println("本路徑已存在相同文件,進行覆蓋");\x0d\ }\x0d\ \x0d\ /**以上就是客戶端代碼中寫到的服務器的準備部分*/\x0d\\x0d\/**\x0d\ * 服務器接收文件的關鍵代碼*/\x0d\ try {\x0d\ /**將文件包裝到文件輸出流對象中*/\x0d\ fos = new FileOutputStream(file);\x0d\ long file_size = Long.parseLong(filesize);\x0d\ is = s.getInputStream();\x0d\ /**size為每次接收數據包的長度*/\x0d\ int size = 0;\x0d\ /**count用來記錄已接收到文件的長度*/\x0d\ long count = 0;\x0d\ \x0d\ /**使用while循環接收數據包*/\x0d\ while(count

  • 上一篇:怎麽把域名解析到qq空間怎麽把域名解析到qq空間
  • 下一篇:股票導航源代碼
  • copyright 2024編程學習大全網