版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、I.Socket的Util輔助類import java .n et.*;import java.io.*;/* 2.socket 的 Util 輔助類* author wills on*/p ublic class Clie ntSocket p rivate String ip;p rivate int port;p rivate Socket socket = nu II;DataOut pu tStream out = n ull;Data Inpu tStream getMessageStream = n ull; p ublic Clie ntSocket(Stri ng ip, i
2、nt port) this.ip = ip;this .port = p ort;/*創(chuàng)建socket連接* throws Exce pti on* exce ptio n*/p ublic void CreateC onnection() throws Exce pti on try socket = new Socket(i p, port); catch (Exce pti on e) e.prin tStackTrace();if (socket != n ull)socket.close();throw e; fin ally /發(fā)送消息p ublic void sen dMessa
3、ge(Stri ng sen dMessage) throws Exce pti on try out = new DataOut pu tStream(socket.getOut pu tStream(); if (se ndMessage.equals("Wi ndows") out.writeByte(0x1);out.flush();return;if (se ndMessage.equals("U nix") out.writeByte(0x2);out.flush();return;if (se ndMessage.equals("
4、L inu x") out.writeByte(0x3); out.flush(); else out.writeUTF(se ndMessage); out.flush(); catch (Exce pti on e) e.prin tStackTrace();if (out != n ull)out.close();throw e; fin ally /接受消息p ublic Data Inpu tStream getMessageStream() throws Exce pti on try getMessageStream = new DataI np utStream( n
5、ew BufferedI np utStream( socket.getI npu tStream();return getMessageStream; catch (Exce pti on e) e.prin tStackTrace();if (getMessageStream != nu II)getMessageStream.close();throw e; fin ally /關(guān)閉連接p ublic void shutDow nConn ecti on() try if (out != n ull)out.close();if (getMessageStream != nu II)ge
6、tMessageStream.close();if (socket != n ull) socket.closeO; catch (Exce pti on e) 2.Socket服務(wù)器端import java.io.BufferedI npu tStream;import java.io.Data Inpu tStream;import java.io.DataOut putStream;import java.io.File;import java.io.FileI np utStream;import java .n et.ServerSocket;import java .n et.So
7、cket;import javax.xml. parsers.Docume ntBuilder;import javax.xml. parsers.Docume ntBuilderFactory;import javax.xml.tra nsform.Tra nsformer;import javax.xml.tra nsform.Tra nsformerFactory;import javax.xml.tra nsform.dom.DOMSource;import javax.xml.tra nsform.stream.StreamResult;import org.w3c.dom.Comm
8、e nt;import org.w3c.dom.Docume nt;import org.w3c.dom.Eleme nt;/* 1.服務(wù)器端* author wills on*/p ublic class ServerTest /設(shè)置端口號(hào),一遍客戶端調(diào)用int port = 8821;void start() Socket socket = n ull;try /創(chuàng)建綁定到特定端口的服務(wù)器套接字。ServerSocket serverSocket = new ServerSocket (port); while (true) /選擇進(jìn)行傳輸?shù)奈募tri ng file Path = wr
9、iteXMLFile();File fi = new File(file Path);System.out.printin("File Name :" + fi.getName() + "tFile Size() :" + (int) fi.le ngth() + "bytes");System.out.printin(” 等待客戶端連接,連接端口:” + port);偵聽并接受到此套接字的連接。此方法在連接傳入之前一直阻塞socket = serverSocket.acce pt();System.out.println(” 建立
10、socket 鏈接");/socket.getl npu tStream()返回此套接字的輸入流Data Inpu tStream (newData Inpu tStreamdis=newBufferedl npu tStream(socket.get Inpu tStream();dis.readByte();Data Inp utStream fis = new Datal np utStream( new Bufferedl np utStream( new File Inp utStream(file Path);DataOut pu tStream ps = new Dat
11、aOut pu tStream(socket.getOut pu tStream();/將文件名及長(zhǎng)度傳給客戶端。這里要真正適用所有平臺(tái),例如中文名 的處理,還需要加工,具體可以參見Thi nk In Java/ 4th里有現(xiàn)成的代碼。p s.writeUTF(fi.getName();ps.flush();p s.writeL on g(l ong) fi.le ngth();ps.flush();int bufferSize = 8192;byte buf = new bytebufferSize;while (true) int read = 0;if (fis != n ull) re
12、ad = fis.read(buf);if (read = -1) break;p s.write(buf, 0, read);ps.flush();注意關(guān)閉socket鏈接哦,不然客戶端會(huì)等待server的數(shù)據(jù)過(guò)來(lái),/直到socket超時(shí),導(dǎo)致數(shù)據(jù)不完整。fis.close();socket.close();System.out.println(” 文件傳輸完成 n”); catch (Exce pti on e) e.prin tStackTrace();IIDOM生成XML文件private Stri ng writeXMLFile()II獲取dom解析的工廠Docume ntBuild
13、erFactory factory = Docume ntBuilderFactory .newin sta nce(); Docume ntBuilder builder;II創(chuàng)建xml文件生成路徑Stri ng path="E:why.xml"try builder = factory. newDocume ntBuilder(); Docume nt doc = builder. newDocume nt();作為XML聲明的一部分指定此文檔版本號(hào)的屬性doc.setXmlVersio n("1.0");Comment 節(jié)點(diǎn)。CharacterDa
14、ta表示注釋的內(nèi)容,即起始 '<!-'XML (實(shí)際上是 HTML )中的注釋的定義,創(chuàng)建給定指定字符串的IIComment此接口繼承自和結(jié)束'->'之間的所有字符。注意,這是在盡管有些HTML工具可以實(shí)現(xiàn)完整SGML注釋結(jié)構(gòu)。Comment comment = doc.createComment(” 倉(cāng)U建 xml 文件");doc.a ppen dChild(comme nt);/創(chuàng)建指定類型的元素Element root = doc.createElement(” 職員");Element name = doc.create
15、Element(” 姓名”);name.appendChild(doc.createTextNode("王海燕");Element sex = doc.createElement(” 性另U");sex.setAttribute(”name","女");root.a ppen dChild( name);root.a ppen dChild(sex);doc.a ppen dChild(root);/ITransformerFactory 實(shí)例可用于創(chuàng)建Transformer 和 Templates 對(duì)象Tran sformerFac
16、tory factoryl = Tran sformerFactory .newin sta nce();II factoryl.newTransformer()創(chuàng)建執(zhí)行從Source 至U Result 的復(fù)制的新Tran sformerTran sformer tformer = factory1. newTra nsformer();II將 XML Source 轉(zhuǎn)換為 Result。當(dāng)實(shí)例化 Transformer和 對(duì) Transformer實(shí)例進(jìn)行任何修改時(shí),指定的轉(zhuǎn)換行為由TransformerFactory的實(shí)際設(shè)置決定。II空 Source 表示為由 DocumentBuil
17、der.newDocument() 構(gòu)造的空文檔。空Source的轉(zhuǎn)換結(jié)果取決于轉(zhuǎn)換行為;結(jié)果不總為空 Resulttformer.tra nsform (new DOMSource(doc), new StreamResult (p ath); catch (Exce ptio n e) II TODO Auto-ge nerated catch blocke.prin tStackTrace(); return p ath;p ublic static void main( Stri ng arg) new ServerTest().start();3.Socket客戶端import ja
18、va.io.BufferedOut putStream;import java.io.Data Inpu tStream;import java.io.DataOut putStream;import java.io.File;import java.io.FileOut pu tStream;import javax.xml. parsers.Docume ntBuilder;import javax.xml. parsers.Docume ntBuilderFactory;import org.w3c.dom.Docume nt;import org.w3c.dom.Eleme nt;im
19、port org.w3c.dom.Node;import org.w3c.dom.NodeList;/* 3.客戶端* author wills on*/p ublic class Clie ntTest p rivate Clie ntSocket cs = n ull;private String ip = "localhost"/ 設(shè)置成服務(wù)器 IPprivate int port = 8821;p rivate String sen dMessage = "Win dwos"p ublic Clie ntTest() try if (create
20、C onnection() sen dMessage(); getMessage("F:"); catch (Exce pti on ex) ex.prin tStackTrace();p rivate boolea n createC onnection() cs = new Clie ntSocket(i p, p ort);try cs.CreateC onn ecti on();System.out.print(” 連接服務(wù)器成功!" + "n"); return true; catch (Exce pti on e) System.o
21、ut.print(” 連接服務(wù)器失敗!" + "n");return false;p rivate void sen dMessage() if (cs = n ull)return;try cs.se ndMessage(se ndMessage); catch (Exce pti on e) System.out.print("發(fā)送消息失敗!" + "n");p rivate void getMessage(Stri ng save Path) if (cs = n ull)return;Data Inpu tStrea
22、m inpu tStream = n ull; try inpu tStream = cs.getMessageStream(); catch (Exce pti on e) System.out.print(”接收消息緩存錯(cuò)誤n”); return;try /本地保存路徑,文件名會(huì)自動(dòng)從服務(wù)器端繼承而來(lái)。int bufferSize = 8192;byte buf = new bytebufferSize;int p assedle n = 0;long len = 0;save Path += inpu tStream.readUTF();DataOut pu tStreamfileOut
23、=newDataOut pu tStream (newBufferedOut pu tStream( new BufferedOut putStream( new FileOut putStream(save Path);len = inpu tStream.readL on g();System.out.println("File Size() :" + len + "bytes");System.out.printing 開始接收文件!" + "n");while (true) int read = 0;if (inpu
24、 tStream != n ull) read = inpu tStream.read(buf);p assedle n += read;if (read = -1) break;II下面進(jìn)度條本為圖形界面的prograssBar做的,這里如果是打文件,可能會(huì)重復(fù)打印出一些相同的百分比System.out.printing 文件接收了 ” + (passedlen * 100 I len) + "%rr); fileOut.write(buf, 0, read);System.out .printing 接收完成,文件存為 ” + save Path + "n")
25、; fileOut.close(); catch (Exce pti on e) System.out.println("接收消息錯(cuò)誤 ” + "n"); return;jiexi(save Path);p ublic static void main( Stri ng arg) new Clie ntTest();p rivate static void jiexi(Stri ng save Path)獲取dom解析的工廠Docume ntBuilderFactory factory = Docume ntBuilderFactory .newin sta nce(); II是否刪除空格false truefactory.setig norin gEleme ntConten tWhites pace(true);獲取解析器Docume ntBuilder builder;try builder = factory. newDocume ntBuilder();II把xml文檔輸入到解析器中,并獲取xml文檔對(duì)應(yīng)的document對(duì)象Docume nt docume nt = builder. parse( new File(sav
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版土建項(xiàng)目施工人員勞動(dòng)合同范本9篇
- 2025年倉(cāng)儲(chǔ)果蔬存儲(chǔ)合同
- 2025年智能社區(qū)內(nèi)新型消費(fèi)體驗(yàn)商鋪?zhàn)赓U合同2篇
- 2025年分銷代理合作模板書
- 2025年醫(yī)療支持服務(wù)合作協(xié)議
- 2025年主題公寓租賃協(xié)議
- 2025年危險(xiǎn)品運(yùn)輸報(bào)關(guān)報(bào)檢協(xié)議
- 2025年作品使用授權(quán)合同
- 2025版外墻內(nèi)保溫系統(tǒng)施工與節(jié)能監(jiān)測(cè)合同3篇
- 2025版信用卡醫(yī)療借款服務(wù)協(xié)議3篇
- 安全常識(shí)課件
- 河北省石家莊市2023-2024學(xué)年高一上學(xué)期期末聯(lián)考化學(xué)試題(含答案)
- 小王子-英文原版
- 新版中國(guó)食物成分表
- 2024年山東省青島市中考生物試題(含答案)
- 河道綜合治理工程技術(shù)投標(biāo)文件
- 專題24 短文填空 選詞填空 2024年中考英語(yǔ)真題分類匯編
- 再生障礙性貧血課件
- 產(chǎn)后抑郁癥的護(hù)理查房
- 2024年江蘇護(hù)理職業(yè)學(xué)院高職單招(英語(yǔ)/數(shù)學(xué)/語(yǔ)文)筆試歷年參考題庫(kù)含答案解析
- 電能質(zhì)量與安全課件
評(píng)論
0/150
提交評(píng)論