15/8/3/网络连接,UDP,DOM,SAX,JSON
来源:互联网 发布:新版mac mini 发布时间 编辑:程序博客网 时间:2024/05/17 20:23
网络连接的几个例子
UDP
DOM
SAX
JSON
读取网页的xml文本
public static void main(String[] args) { try { URL url=new URL("http://www.baidu.com");//根据 String 表示形式创建 URL 对象 InputStream is=url.openStream();//打开到此 URL 的连接并返回一个用于从该连接读入的 InputStream BufferedReader br=new BufferedReader(new InputStreamReader(is));//建立缓冲流 String line=br.readLine();//读一行 while(line!=null){ System.out.println(line); line=br.readLine();//读下一行 } br.close(); is.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
读取指定地址的图片并放在指定位置上
// 将一副图片(无论是什么格式的)写入一个文件中 public static void main(String[] args) { try {// 根据 String 表示形式创建 URL 对象//类 URL 代表一个统一资源定位符,它是指向互联网“资源”的指针// URL url=new URL("http://imgsrc.baidu.com/baike/pic/item/7af40ad162d9f2d339d2a789abec8a136227cc91.gif"); URL url=new URL("http://g.hiphotos.baidu.com/zhidao/wh%3D450%2C600/sign=4ad7bfb61bd8bc3ec65d0eceb7bb8a28/b3119313b07eca80436e336b932397dda04483d6.jpg");// URL url=new URL("http://music.baidu.com/song/14945107/download?__o=%2Fsong%2F14945107#rate=1000"); File fileGif=new File("e:\\喵喵.gif"); if (!fileGif.exists()) {//判断时候存在文件,如果没有就创建 fileGif.createNewFile(); } OutputStream os=new FileOutputStream(fileGif); InputStream is=url.openStream(); byte[] arry=new byte[1024];//字节缓冲区 int i=is.read(arry);//读字节 while(i!=-1){//判断是否结束 os.write(arry, 0, i);//将字节流写入文件 i=is.read(arry);//继续往下读 } os.flush();//冲刷 os.close();//关闭 is.close(); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
1.UDP协议(User Datagram Protocol)即:用户数据包协议,是一种不可靠的网络协议,它在通信示例的两端各建立一个Socket,但是这两个Socket之间没有虚拟连接,这两个Socket具有发送和接受数据包的对象
2.UDP协议的主要作用是完成网络数据流量和数据包之间的链接转换
3.信息的发送端,UDP协议将网络数据流量封装成数据包,然后将数据包发送出去。
4.信息的接受端,UDP协议将数据包接受后转换成实际数据内容。
UDP和TCP的对比
1.TCP协议:可靠,传输数据包的大小没有限制,但是需要连接建立时间,差错控制的开销大
2.UDP协议:不可靠,差错控制开销小,传输数据包大小有限制(64K以下)而且不需要建立连接
UDP的例子
public static void main(String[] args) { try { DatagramSocket send=new DatagramSocket();//利用计算机闲置端口将数据发送出去 String s="你好,我要发送给您一条信息";//发送的字符 byte[] array=s.getBytes();//将字符更改为字符流// 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号 DatagramPacket packet=new DatagramPacket(array, array.length,InetAddress.getLocalHost(),8080); System.out.println("开始发送数据"); send.send(packet);//从此套接字发送数据报包 send.close();//关闭send流 } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { try { DatagramSocket receiver=new DatagramSocket(8080);//创建数据报套接字并将其绑定到本地主机上的指定端口 byte[] array=new byte[1024];//构建发送数据流长度,不能超过64k DatagramPacket packet=new DatagramPacket(array, array.length);//构造 DatagramPacket,用来接收长度为 length 的数据包 receiver.receive(packet);//从此套接字接收数据报包 byte[] data=packet.getData();//返回数据缓冲区 System.out.println("接收到的数据\n"+(new String (data))); receiver.close(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { try { DatagramSocket receiver = new DatagramSocket(8088);//创建数据报套接字并将其绑定到本地主机上的指定端口 byte[] ReceiverArray = new byte[1024];//构建发送数据流长度,不能超过64k DatagramSocket send = new DatagramSocket();//利用计算机闲置端口将数据发送出去 //String s="你好,我要发送给您一条信息";//发送的字符 while (true) { System.out.println("Send端发送的数据为:"); Scanner scanner = new Scanner(System.in); String SendString = scanner.next(); byte[] array = SendString.getBytes();//将字符更改为字符流 //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号 DatagramPacket packet = new DatagramPacket(array, array.length, InetAddress.getByName("192.168.0.111"),8080); send.send(packet);//从此套接字发送数据报包 //以上为发送数据段 //以下我接受数据 DatagramPacket ReceiverPacket = new DatagramPacket(ReceiverArray, ReceiverArray.length);//构造 DatagramPacket,用来接收长度为 length 的数据包 receiver.receive(ReceiverPacket);//从此套接字接收数据报包 byte[] data = ReceiverPacket.getData();//返回数据缓冲区 //注意是包的长度,如果写的是数组的长度就会发生字节数组清空不了的情况 //System.out.println("Send端接收到的数据:" + new String(data,0,data.length));//字节数组清空不了,导致有重复内容发送 System.out.println("Send端接收到的数据:" + new String(data, 0, ReceiverPacket.getLength())); } //send.close();//关闭send流 } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { try { DatagramSocket receiver = new DatagramSocket(8080);//创建数据报套接字并将其绑定到本地主机上的指定端口 byte[] array = new byte[1024];//构建发送数据流长度,不能超过64k DatagramSocket send = new DatagramSocket();//利用计算机闲置端口将数据发送出去 while (true) { DatagramPacket packet = new DatagramPacket(array, 1024);//构造 DatagramPacket,用来接收长度为 length 的数据包 receiver.receive(packet);//从此套接字接收数据报包 byte[] data = packet.getData();//返回数据缓冲区 System.out.println("Receiver端接收到的数据:" + new String(data,0,packet.getLength())); //以上为接受端接受数据 //以下为发送端发送数据 System.out.println("Receiver端发送的数据:"); Scanner scanner = new Scanner(System.in); String ReceiverString = scanner.next(); byte[] SendArray = ReceiverString.getBytes();//将字符更改为字符流 //构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号 DatagramPacket SendPacket = new DatagramPacket(SendArray, SendArray.length, InetAddress.getLocalHost(), 8088); send.send(SendPacket);//从此套接字发送数据报包 } //receiver.close(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
DOM解析例子
public static void main(String[] args) { DocumentBuilderFactory facroyt=DocumentBuilderFactory.newInstance();//创建dom解析器的工厂 DocumentBuilder bulider; try { bulider = facroyt.newDocumentBuilder();//使用解析器工厂创建解析器 Document document= bulider.parse("d:\\11.txt");//使用解析器解析文档生成倒树的document NodeList list=document.getElementsByTagName("Weather");//得到文档中的所有Weather标签 Node node=list.item(0);//得到第一个Weather标签 Node child=node.getFirstChild();//得到Weather标签的第一个子标签city Node next=child.getNextSibling();//得到city的下一个标签 while(next!=null){//判断有没有走到最后一个标签 if (next.getNodeType()==Node.ELEMENT_NODE) {//判断节点类型是ELEMENT_NODE Node content=next.getFirstChild();//得到该节点的第一个子节点不能为空 if (content!=null) { System.out.println(next.getFirstChild().getNodeValue().trim());//STring 中有一个方法叫trim去掉前后空格 } } next =next.getNextSibling();//得到下一个标签 } } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
SAX解析例子
public class MySAXHandler extends DefaultHandler{ private boolean isArrive=false; @Override public void characters(char[] ch, int start, int length) throws SAXException { super.characters(ch, start, length);//接收元素中字符数据的通知 if (isArrive) { System.out.println("我终于查到这个scz的值了"+new String(ch,start,length)); } } @Override public void endDocument() throws SAXException { super.endDocument(); System.out.println("解析文档结束");//接收文档结束的通知 } @Override public void endElement(String uri, String localName, String qName) throws SAXException { super.endElement(uri, localName, qName); System.out.println(localName+"标签结束"+qName);// 接收元素结束的通知 isArrive=false; } @Override public void startDocument() throws SAXException { super.startDocument(); System.out.println("解析文档开始");//接收文档开始的通知 } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { super.startElement(uri, localName, qName, attributes); isArrive=qName.equals("xcz"); System.out.println(localName+"标签开始"+qName);// 接收元素开始的通知 }} public static void main(String[] args) {// 定义工厂 API,使应用程序能够配置和获取基于 SAX 的解析器以解析 XML 文档 SAXParserFactory factory=SAXParserFactory.newInstance(); try { SAXParser parser=factory.newSAXParser();//使用当前配置的工厂参数创建 SAXParser 的一个新实例 MySAXHandler handler=new MySAXHandler(); parser.parse(new File("d:\\11.txt"), handler);//使用指定的 DefaultHandler 将指定文件的内容解析为 XML } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
JSON解析例子
public static void main(String[] args) { String json=creatJSON(); JSONObject obj=JSONObject.fromObject(json);//将输入的数据格式化为JSON格式进行显示 System.out.println(obj.getString("city"));//打印key为"city"中的value值 JSONObject today=obj.getJSONObject("today"); JSONArray array=today.getJSONArray("index"); for (int i = 0; i < array.size(); i++) { JSONObject obj1=array.getJSONObject(i); System.out.println(obj1.getString("name")); } } private static String creatJSON(){ JSONObject obj=new JSONObject();//定义一个JSONObject对象 obj.put("city", "北京");//向对象中添加元素 obj.put("cityid", "001"); JSONObject today=new JSONObject(); today.put("date", "2015-08-03"); today.put("week", "星期一"); JSONArray array=new JSONArray(); JSONObject index1=new JSONObject(); index1.put("name", "感冒"); JSONObject index2=new JSONObject(); index2.put("name", "防晒"); JSONObject index3=new JSONObject(); index3.put("name", "炎热"); array.add(index1); array.add(index2); array.add(index3); today.put("index", array); obj.put("today", today); System.out.println(obj.toString()); return obj.toString(); }
0 0
- 15/8/3/网络连接,UDP,DOM,SAX,JSON
- 08-03 网络通信(UDP) URL XML解析器 JSON、DOM、SAX 枚举
- 08-03 网络通信(UDP) URL XML解析器 JSON、DOM、SAX 枚举
- DOM SAX JSON数据解析
- Android学习笔记 - DOM SAX PULL JSON
- UI数据解析(Dom,Sax,Json)
- Android-DOM、SAX、PULL解析网络xml
- UI一揽子计划 15 (XML的解析方式 (SAX解析/ DOM解析) 、JSON 解析)
- DOM&&SAX
- sax&dom
- DOM & SAX
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- [Android]四种方式解析字符串----JSON、SAX、DOM、XML
- android中json、sax、dom解析xml对比
- XML解析、DOM解析、SAX解析、Json解析
- 16 JSON解析、XML解析(DOM解析,SAX解析)
- linux oracle修改最大连接数
- HDU 3729 I'm Telling the Truth
- hdu 1700 Points on Cycle(几何)(中等)
- 链表的创造(我的困难主要在这)
- Class 类的用法
- 15/8/3/网络连接,UDP,DOM,SAX,JSON
- 逆序的BSF输出
- QDBus与gdbus的数据传递详解
- HDU 1021 Fibonacci Again
- Delphi7第八天---小型图书管理系统
- 项目分析(2)
- 递归 N皇后问题
- HDU 5344 MZL's xor
- HSACM 1680 能量项链