Socket服务端和客户端XML生成与解析java代码_第1页
Socket服务端和客户端XML生成与解析java代码_第2页
Socket服务端和客户端XML生成与解析java代码_第3页
Socket服务端和客户端XML生成与解析java代码_第4页
Socket服务端和客户端XML生成与解析java代码_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.Socket的Util辅助类import .throws Exceptionexception;import java.io.*;/*/public void CreateConnection() throws Exception try socket = new Socket(ip, port); catch (Exception e) e.printStackTrace(); if (socket != null)socket.close();throw e; finally /发送消息public void sendMessage(String sendMessage) throws

2、 Exception try out = new DataOutputStream(socket.getOutputStream(); if (sendMessage.equals(Windows) out.writeByte(0 x1);* 2.socket 的 Util 辅助类* author willson*/public class ClientSocket private String ip;private int port;private Socket socket = null;DataOutputStream out = null;DataInputStream getMess

3、ageStream = null; public ClientSocket(String ip, int port) this.ip = ip;this.port = port;/*创建socket连接 out.flush(); return;if (sendMessage.equals(Unix) out.writeByte(0 x2);out.flush(); return;if (sendMessage.equals(Linux) out.writeByte(0 x3);out.flush(); else out.writeUTF(sendMessage); out.flush(); c

4、atch (Exception e) e.printStackTrace(); if (out != null) out.close();throw e; finally /接受消息public DataInputStream getMessageStream() throws Exception try getMessageStream = new DataInputStream(new BufferedInputStream( socket.getInputStream();return getMessageStream; catch (Exception e) e.printStackT

5、race(); if (getMessageStream != null)getMessageStream.close(); throw e; finally /关闭连接public void shutDownConnection() try if (out != null) out.close();if (getMessageStream != null)getMessageStream.close();if (socket != null) socket.close(); catch (Exception e) 2.Socket服务器端import java.io.BufferedInpu

6、tStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import .ServerSocket;import .Socket;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import javax.xml.transform.Transformer;import javax.x

7、ml.transform.TransformerFactory;import javax.xml.transform.dom.DOMSource;import javax.xml.transform.stream.StreamResult;import org.w3c.dom.Comment;import org.w3c.dom.Document;import org.w3c.dom.Element;/ author willson* */public class ServerTest 设置端口号,一遍客户端调用int port = 8821;void start() Socket socke

8、t = null;try /创建绑定到特定端口的服务器套接字。ServerSocket serverSocket = new ServerSocket(port); while (true) /选择进行传输的文件String filePath = writeXMLFile();File fi = new File(filePath);* 1.服务器端*System.out.println(File Name : + fi.getName() + ;tFile Size() : + (int) fi.length() + bytes);System.out.println(等待客户端连接,连接端

9、口 : + port);侦听并接受到此套接字的连接。此方法在连接传入之前一直阻塞socket = serverSocket.accept();System.out.println(建立 socket 链接);/socket.getInputStream()返回此套接字的输入流DataInputStream dis = new DataInputStream(new BufferedInputStream(socket.getInputStream(); dis.readByte(); DataInputStream fis = new DataInputStream(new BufferedI

10、nputStream(new FileInputStream(filePath);DataOutputStream ps = new DataOutputStream(socket.getOutputStream();/将文件名及长度传给客户端。这里要真正适用所有平台,例如中文名 的处理,还需要加工,具体可以参见 Think In Java/ 4th里有现成的代码。ps.writeUTF(fi.getName();ps.flush();ps.writeLong(long) fi.length();ps.flush();int bufferSize = 8192;byte buf = new b

11、ytebufferSize;while (true) int read = 0;if (fis != null) read = fis.read(buf);if (read = -1) break;ps.write(buf, 0, read);ps.flush();注意关闭socket链接哦,不然客户端会等待server的数据过来,/直到socket超时,导致数据不完整。fis.close();socket.close();System.out.println(文件传输完成 n); catch (Exception e) e.printStackTrace();/DOM生成XML文件priva

12、te String writeXMLFile()/获取dom解析的工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder;/创建xml文件生成路径String path=E:why.xml; try builder = factory.newDocumentBuilder();Document doc = builder.newDocument();作为XML声明的一部分指定此文档版本号的属性doc.setXmlVersion(1.0);创建给定指定字符串的C

13、omment节点。/Comment此接口继承自 CharacterData表示注释的内容,即起始 之间的所有字符。注意,这是在 XML (实际上是 HTML )中的注释的定义, 尽管有些HTML工具可以实现完整SGML注释结构。Comment comment = doc.createComment(创建 xml 文件);doc.appendChild(comment);创建指定类型的元素Element root = doc.createElement(职员);Element name = doc.createElement(姓名力name.appendChild(doc.createTextN

14、ode(王海燕);Element sex = doc.createElement(性另1J);sex.setAttribute(name,女)root.appendChild(name);root.appendChild(sex);doc.appendChild(root);/TransformerFactory 实例可用于创建 Transformer 和 Templates 对象TransformerFactory factory1 = TransformerFactory.newInstance();/ factory1.newTransformer()创建执彳亍从Source 至U Re

15、sult 的复制的新TransformerTransformer tformer = factory1.newTransformer();将 XML Source 转换为 Result。当实例化 Transformer和 对 Transformer实例进行任何修改时,指定的转换行为由TransformerFactory的实际设置决定。空 Source 表示为由 DocumentBuilder.newDocument() 构造的空文档。空Source的转换结果取决于转换行为;结果不总为空Resulttformer.transform(new DOMSource(doc), new StreamR

16、esult(path); catch (Exception e) / TODO Auto-generated catch blocke.printStackTrace(); return path;public static void main(String arg口) new ServerTest().start();3.Socket客户端import java.io.BufferedOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.File;import ja

17、va.io.FileOutputStream;import javax.xml.parsers.DocumentBuilder;import javax.xml.parsers.DocumentBuilderFactory;import org.w3c.dom.Document;import org.w3c.dom.Element;import org.w3c.dom.Node;import org.w3c.dom.NodeList;/ author willson* */public class ClientTest private ClientSocket cs = null;privat

18、e String ip = localhost;/设置成服务器 IPprivate int port = 8821;private String sendMessage = Windwos;public ClientTest() try if (createConnection() sendMessage();getMessage(F:); catch (Exception ex) ex.printStackTrace();private boolean createConnection() * 3.客户端*cs = new ClientSocket(ip, port);try cs.Crea

19、teConnection();System.out.print(连接服务器成功! + n);return true; catch (Exception e) System.out.print(连接服务器失败! + n);return false;private void sendMessage() if (cs = null)return;try cs.sendMessage(sendMessage); catch (Exception e) System.out.print(发送消息失败! + n);private void getMessage(String savePath) if (c

20、s = null)return;DataInputStream inputStream = null;try inputStream = cs.getMessageStream(); catch (Exception e) System.out.print(接收消息缓存错误n);return;try /本地保存路径,文件名会自动从服务器端继承而来。int bufferSize = 8192;byte口 buf = new bytebufferSize;int passedlen = 0;long len = 0;savePath += inputStream.readUTF();DataOut

21、putStream fileOut = new DataOutputStream(newBufferedOutputStream(new BufferedOutputStream(new FileOutputStream(savePath);len = inputStream.readLong();System.out.println(File Size() : + len + bytes);System.out.println(开始接收文件! + n);while (true) int read = 0;if (inputstream != null) read = inputStream.

22、read(buf);passedlen += read;if (read = -1) break;/下面进度条本为图形界面的prograssBar做的,这里如果是打文件,可能会重复打印出一些相同的百分比System.out.println(文件接收了 + (passedlen * 100 / len) + %n);fileOut.write(buf, 0, read);System.out.println(接收完成,文件存为 + savePath + n);fileOut.close(); catch (Exception e) System.out.println(接收消息错误+ n);re

23、turn;jiexi(savePath);public static void main(String arg口)new ClientTest();private static void jiexi(String savePath)获取dom解析的工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();是否删除空格false truefactory.setIgnoringElementContentWhitespace(true);获取解析器DocumentBuilder builder;try builder = factory.newDocumentBuilder();/把xml文档输入到解析器中,并获取xml文档对应的document对象Document document = builder.pa

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论