客戶端向服務端發送數據-網絡編程_第1頁
客戶端向服務端發送數據-網絡編程_第2頁
客戶端向服務端發送數據-網絡編程_第3頁
客戶端向服務端發送數據-網絡編程_第4頁
客戶端向服務端發送數據-網絡編程_第5頁
已閱讀5頁,還剩2頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

客戶端向服務端發送數據一網絡編程LT服務器端源碼:;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.lOException;importjava.io.Inputstream;importjava.io.InputStreamReader;import.ServerSocket;import.Socket;*文ServerReceive.java工實現功能:作為服務器接收客戶端發送的文件具體實現過程:1、建立Socketserver,等待客戶端的連接2、當有客戶端連接的時候,按照雙方的約定,這時要讀取三行數據其中保存客戶端要發送的文件名和文件大小信息3、根據文件名在本地創建文件,并建立好流通信4、循環接收數據包,將數據包寫入文聞5、當接收數據的長度等于提前文件發過來的文件長度,即表示文件接收完畢,關閉文件6、文件接收工作結束publicclassServerReceive{publicstaticvoidmain(String[]args){卜與服務器建立連接的通信句柄★/ServerSocketss=null;Sockets=null;義用于后接收后在本地創建的文件對象和文件輸出流對象*/Filefile=null;FileOutputStreamfos=null;/**定義輸入流,使用socket的inputstream對數據包進行輸入*/Inputstreamis=null;/**定義byte數組來作為數據包的存儲數據包*/byte[]buffer=newbyte[4096*5];/**用來接收文件發送請求的字符串★/Stringcomm=null;/**建立socekt通信,等待服務器進行連接*/try{ss=newServerSocket(4004);s=ss.accept();}catch(lOExceptione){e.printStackTrace();}/**讀取一行客戶端發送過來的約定信息*/try(InputStreamReaderisr=newlnputStreamReader(s.getlnputStream());BufferedReaderbr=newBufferedReader(isr);comm=br.readLine();}catch(lOExceptione){System,out,printing服務器與客戶端斷開連接}開始解析客戶端發送過來的請求命令*/intindex=comm.indexOf(,7#H);/**判斷協議是否為發送文件的協議?Stringxieyi=comm.substring(0,index);if(!xieyi.equals(n111H)){("服務器收到的協議碼不正確)return;/**解析出文件的名字和大小*/comm=comm.substring(index+2);index=comm.indexOf('7#n);Stringfilename=comm.substring(0,index).trim();Stringfilesize=comm.substring(index+2).trim();/★★創建空文件,用來進行接收文件//file=newFile(filename);if(!file.exists()){try{file.createNewFile();}catch(lOExceptione){System.out.printin("服務器端創建文件失敗))}else{/“在此也可以詢問是否覆蓋?/("本路徑已存在相同文件,進行橙蓋))/"【以上就是客戶端代碼中寫到的服務器的準備部分】7/**.服務器接收文件的關鍵代碼?/try(/”將文件包裝到文件輸出流時象中7fos=newFileOutputStream(file);longfilesize=Long.parseLong(filesize);is=s.getlnputStream();/“size為每次接收數據包的長度?/intsize=0;/“count用來記錄已接收到文件的長度./longcount=0;/”使用while循環接收數據包?/while(count<file__size){從輸入流中讀取一個數據包Vsize=is.read(buffer);/"將剛剛讀取的數據包寫到本地文件中去?/fos.write(buffer,0,size);fos.flush();/*?將已接收到文件的長度+size?/count+=size;?服務器端接收到數據包,大小為-+size);)}catch(FileNotFoundExceptione){System.out.println(■服務器寫文件失敗");}catch(lOExceptione){Systenout.primin(-服務器:客戶端斷開連接)}finally{L將打開的文件關閉如如需要,也可以在此關閉socket連接7try{if(fos!=null)fos.close();}catch(lOExceptione){e.printStackTrace();}//catch(lOExceptione)}//finally}//publicstaticvoidmain(StringQargs)}//publicclassServerReceive客戶瑞源碼,importjava.io.File;importjava.io.FilelnputStream;importjava.io.FileNotFoundException;importjava.ioJOException;importjava.io.OutputStream;importjava.io.PrintStream;import.Socket;.*文件名:ClientSend.java實現功能:作為客戶端向服務器發送一個文件.具體實現過程:1、建立與服務器端的連接,IP:,port:40042、將文件的名字和大小通過自定義的文件傳輸協議,發送到服務器3、循環讀取本地文件,將文件打包發送到數據輸出流中4、關閉文件,結束傳輸7publicclassClientSend{publicstaticvoidmain(StringQargs){r與服務器建立連接的通信句柄?/Sockets=null;〃?定義文件對象,即為要發送的文件如果使用絕對路徑,不要忘記使用7和T的區別具體區別,請讀者自行錢詢7Filesendfile=newFile(HAPLCHMM):/“定義文件輸入流,用來打開、讀取即將要發送的文件?/FilelnputStreamfis=null;/**定必byte數組來作為數據包的存儲數據包System,out,printing服務器連接中斷)此處睡眠2s,等待服務器把相關的工作準備好}//catch(lOExceptione)System,out,printing服務器連接中斷)此處睡眠2s,等待服務器把相關的工作準備好}//catch(lOExceptione)/**定義輸出流,使用socket的outputstream對數據包進行輸出*/Outputstreamos=null;/**檢查要發送的文件是否存在*/if(!sendfile.exists()){("客戶端:要發送的文件不存在)return;)/*涓服務器建立連接*/try{s=newSocket?!薄?,4004);}catch(lOExceptione){System.out,printing未連接到服務器)}/**用文件對象初始化fis對象以便于可以提取出文件的大小try{fis=newFilelnputStream(sendfile);}catch(FileNotFoundExceptione1){e1.printStackTrace();/★★首先先向服務器發送關于文件的信息,以便于服務器進行接收的相關準備工作具體的準備工作,請查看服務器代碼。|"1*發送的內容包括:發送文件協議碼(此處為111)/#文件名(帶后綴名)/#文件大小try(Printstreamps=newPrintStream(s.getOutputStream());ps.println(n111/#"+sendfile.getName()+"/#"+fis.available());ps.flush();}catch(lOExceptione){也是為了保證網絡的延遲讀者可自行選擇添加此代碼*/try{Thread.sleep(2000);}catch(InterruptedExceptione1){e1.printStackTrace();)/**之前的準備工作結束之后下面就是文件傳輸的關鍵代碼try{/**獲取socket的Outputstream,以便向其中寫入數據包*/os=s.getOutputStream();/**size用來記錄每次讀取文件的大小Rintsize=0;/**使用while循環讀取文件,直到文件讀取結束*/while((size=fis.read(buffer))!=-1){("客戶端發送數據包,大小為"+size);/**向輸出流中寫入剛剛讀到的數據包*/os.write(buffer50,size);卜*刷新一下*/os.flush();5}catch(FileNotFoundExceptione){System.out.printin("客戶端讀取文件出錯)}catch(lOExceptione){System.out.

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論