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
原创粉丝点击