




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
客戶端向服務(wù)端發(fā)送數(shù)據(jù)一網(wǎng)絡(luò)編程LT服務(wù)器端源碼:;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.lOException;importjava.io.Inputstream;importjava.io.InputStreamReader;import.ServerSocket;import.Socket;*文ServerReceive.java工實現(xiàn)功能:作為服務(wù)器接收客戶端發(fā)送的文件具體實現(xiàn)過程:1、建立Socketserver,等待客戶端的連接2、當(dāng)有客戶端連接的時候,按照雙方的約定,這時要讀取三行數(shù)據(jù)其中保存客戶端要發(fā)送的文件名和文件大小信息3、根據(jù)文件名在本地創(chuàng)建文件,并建立好流通信4、循環(huán)接收數(shù)據(jù)包,將數(shù)據(jù)包寫入文聞5、當(dāng)接收數(shù)據(jù)的長度等于提前文件發(fā)過來的文件長度,即表示文件接收完畢,關(guān)閉文件6、文件接收工作結(jié)束publicclassServerReceive{publicstaticvoidmain(String[]args){卜與服務(wù)器建立連接的通信句柄★/ServerSocketss=null;Sockets=null;義用于后接收后在本地創(chuàng)建的文件對象和文件輸出流對象*/Filefile=null;FileOutputStreamfos=null;/**定義輸入流,使用socket的inputstream對數(shù)據(jù)包進行輸入*/Inputstreamis=null;/**定義byte數(shù)組來作為數(shù)據(jù)包的存儲數(shù)據(jù)包*/byte[]buffer=newbyte[4096*5];/**用來接收文件發(fā)送請求的字符串★/Stringcomm=null;/**建立socekt通信,等待服務(wù)器進行連接*/try{ss=newServerSocket(4004);s=ss.accept();}catch(lOExceptione){e.printStackTrace();}/**讀取一行客戶端發(fā)送過來的約定信息*/try(InputStreamReaderisr=newlnputStreamReader(s.getlnputStream());BufferedReaderbr=newBufferedReader(isr);comm=br.readLine();}catch(lOExceptione){System,out,printing服務(wù)器與客戶端斷開連接}開始解析客戶端發(fā)送過來的請求命令*/intindex=comm.indexOf(,7#H);/**判斷協(xié)議是否為發(fā)送文件的協(xié)議?Stringxieyi=comm.substring(0,index);if(!xieyi.equals(n111H)){("服務(wù)器收到的協(xié)議碼不正確)return;/**解析出文件的名字和大小*/comm=comm.substring(index+2);index=comm.indexOf('7#n);Stringfilename=comm.substring(0,index).trim();Stringfilesize=comm.substring(index+2).trim();/★★創(chuàng)建空文件,用來進行接收文件//file=newFile(filename);if(!file.exists()){try{file.createNewFile();}catch(lOExceptione){System.out.printin("服務(wù)器端創(chuàng)建文件失敗))}else{/“在此也可以詢問是否覆蓋?/("本路徑已存在相同文件,進行橙蓋))/"【以上就是客戶端代碼中寫到的服務(wù)器的準(zhǔn)備部分】7/**.服務(wù)器接收文件的關(guān)鍵代碼?/try(/”將文件包裝到文件輸出流時象中7fos=newFileOutputStream(file);longfilesize=Long.parseLong(filesize);is=s.getlnputStream();/“size為每次接收數(shù)據(jù)包的長度?/intsize=0;/“count用來記錄已接收到文件的長度./longcount=0;/”使用while循環(huán)接收數(shù)據(jù)包?/while(count<file__size){從輸入流中讀取一個數(shù)據(jù)包Vsize=is.read(buffer);/"將剛剛讀取的數(shù)據(jù)包寫到本地文件中去?/fos.write(buffer,0,size);fos.flush();/*?將已接收到文件的長度+size?/count+=size;?服務(wù)器端接收到數(shù)據(jù)包,大小為-+size);)}catch(FileNotFoundExceptione){System.out.println(■服務(wù)器寫文件失敗");}catch(lOExceptione){Systenout.primin(-服務(wù)器:客戶端斷開連接)}finally{L將打開的文件關(guān)閉如如需要,也可以在此關(guān)閉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實現(xiàn)功能:作為客戶端向服務(wù)器發(fā)送一個文件.具體實現(xiàn)過程:1、建立與服務(wù)器端的連接,IP:,port:40042、將文件的名字和大小通過自定義的文件傳輸協(xié)議,發(fā)送到服務(wù)器3、循環(huán)讀取本地文件,將文件打包發(fā)送到數(shù)據(jù)輸出流中4、關(guān)閉文件,結(jié)束傳輸7publicclassClientSend{publicstaticvoidmain(StringQargs){r與服務(wù)器建立連接的通信句柄?/Sockets=null;〃?定義文件對象,即為要發(fā)送的文件如果使用絕對路徑,不要忘記使用7和T的區(qū)別具體區(qū)別,請讀者自行錢詢7Filesendfile=newFile(HAPLCHMM):/“定義文件輸入流,用來打開、讀取即將要發(fā)送的文件?/FilelnputStreamfis=null;/**定必byte數(shù)組來作為數(shù)據(jù)包的存儲數(shù)據(jù)包System,out,printing服務(wù)器連接中斷)此處睡眠2s,等待服務(wù)器把相關(guān)的工作準(zhǔn)備好}//catch(lOExceptione)System,out,printing服務(wù)器連接中斷)此處睡眠2s,等待服務(wù)器把相關(guān)的工作準(zhǔn)備好}//catch(lOExceptione)/**定義輸出流,使用socket的outputstream對數(shù)據(jù)包進行輸出*/Outputstreamos=null;/**檢查要發(fā)送的文件是否存在*/if(!sendfile.exists()){("客戶端:要發(fā)送的文件不存在)return;)/*涓服務(wù)器建立連接*/try{s=newSocket?!薄?,4004);}catch(lOExceptione){System.out,printing未連接到服務(wù)器)}/**用文件對象初始化fis對象以便于可以提取出文件的大小try{fis=newFilelnputStream(sendfile);}catch(FileNotFoundExceptione1){e1.printStackTrace();/★★首先先向服務(wù)器發(fā)送關(guān)于文件的信息,以便于服務(wù)器進行接收的相關(guān)準(zhǔn)備工作具體的準(zhǔn)備工作,請查看服務(wù)器代碼。|"1*發(fā)送的內(nèi)容包括:發(fā)送文件協(xié)議碼(此處為111)/#文件名(帶后綴名)/#文件大小try(Printstreamps=newPrintStream(s.getOutputStream());ps.println(n111/#"+sendfile.getName()+"/#"+fis.available());ps.flush();}catch(lOExceptione){也是為了保證網(wǎng)絡(luò)的延遲讀者可自行選擇添加此代碼*/try{Thread.sleep(2000);}catch(InterruptedExceptione1){e1.printStackTrace();)/**之前的準(zhǔn)備工作結(jié)束之后下面就是文件傳輸?shù)年P(guān)鍵代碼try{/**獲取socket的Outputstream,以便向其中寫入數(shù)據(jù)包*/os=s.getOutputStream();/**size用來記錄每次讀取文件的大小Rintsize=0;/**使用while循環(huán)讀取文件,直到文件讀取結(jié)束*/while((size=fis.read(buffer))!=-1){("客戶端發(fā)送數(shù)據(jù)包,大小為"+size);/**向輸出流中寫入剛剛讀到的數(shù)據(jù)包*/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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 西餐廳餐飲創(chuàng)業(yè)計劃書-范例
- 心理咨詢治療計劃
- 東莞調(diào)味食品項目商業(yè)計劃書
- 石墨烯項目合作計劃書圖文
- 2025年中國柔性透明導(dǎo)電膜項目創(chuàng)業(yè)計劃書
- 新學(xué)期教學(xué)計劃指導(dǎo)思想
- 小班下學(xué)期閱讀教學(xué)計劃
- 打印項目項目計劃書
- 2025年氯金酸項目合作計劃書
- 商業(yè)規(guī)劃計劃書
- 2025-2030年中國煤電行業(yè)市場深度發(fā)展趨勢與前景展望戰(zhàn)略研究報告
- 2025年醫(yī)院感染控制試題及答案
- 浙江省溫州市環(huán)大羅山聯(lián)盟2024-2025學(xué)年高一下學(xué)期期中考試 英語 PDF版含答案
- 環(huán)境保護項目進度安排與保障措施
- 馬工程西方經(jīng)濟學(xué)(精要本第三版)教案
- 考研項目合同協(xié)議模板
- 重慶財經(jīng)學(xué)院專職輔導(dǎo)員招聘真題2024
- DBJ04-T 312-2024 濕陷性黃土場地勘察及地基處理技術(shù)標(biāo)準(zhǔn)
- 2025年標(biāo)準(zhǔn)離婚協(xié)議書模板(無財產(chǎn)爭議)
- 醫(yī)療廢物管理職責(zé)的監(jiān)督機制
- 【高考真題】2022年高考物理真題試卷-福建卷(含答案)
評論
0/150
提交評論