zoukankan      html  css  js  c++  java
  • UDP网络编程



    IP地址和端口
    IP地址:是计算机在网络中的唯一标示,我们在进行网络编程时一定要定位到远程计算机,而IP地址就是解决这个问题的。
    端口:除了计算机外我们还要定位到具体的应用程序进程,而端口就是给应用程序分配的身份标示。
    UDP和TCP
    UDP:1,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。
               2,UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64kB之内。
                3,UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。
    TCP:1,面向连接的协议,在socket之间进行数据传输之前必须要建立连接,是通过三次握手来建立连接的,所以在TCP中需要连接时                    间。
                2,TCP传输数据大小限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大的数据。
                3,TCP是一个可靠的协议,它确保接收方完全正确的获取发送方所发送的全部数据。
    数据帧格式

    Socket
    简单理解下,Socket就是一个应用程序编程的机制和一种接口,可以理解为是应用程序创建的一个港口码头,应用程序只要把装着货物的集装箱(在程序中就是要通过网络发送的数据)放到港口码头上,就算完成了货物的运送,剩下来的工作就由货运公司去处理了(在计算机中由驱动程序来充当货运公司)。如果把DatagramSocket比喻为创建的港口码头,那么DatagramPacket就是我们发送和接收数据的集装箱。
    关于InetAddress类
    java中的InetAddress 类是一个代表IP地址的封装。IP地址可以由字节数组和字符串来分别表示,InetAddress将IP地址以对象的形式进行封装,可以更方便的操作和获取其属性。InetAddress没有构造方法,可以通过两个静态方法获得它的对象。
    public class IPDemo {

        /**
         * @param args
         * @throws UnknownHostException
         */
        public static void main(String[] args) throws UnknownHostException {

            //获取本地主机ip对象。
    //        InetAddress ip = InetAddress.getLocalHost();
            InetAddress ip = InetAddress.getByName("192.168.1.252");
           
            //获取ip对象中的ip地址字符串。或者ip地址对应的主机名称。
            System.out.println(ip.getHostAddress());
            System.out.println(ip.getHostName());
        }

    }

    UDP编程
    接收端
     public class UDPRece {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {

            /*
             * udp的接收端:
             * 思路:
             * 1,创建udpsocket服务。
             * 2,接收数据并存储到数据包中,存储到数据包中的目的是为了解析接收到的数据。
             * 3,将解析到的数据打印到显示器。
             * 4,关闭服务。
             */
            System.out.println("udp 接收端开启");
            //1,创建udp的socket服务。用于接收端,一定要指定端口,因为必须要明确从哪个端口来的数据是这个应用程序所能解析的。
            //简单说:接收端必须监听一个端口。
            DatagramSocket  ds = new DatagramSocket(10000);
            
        
            //2,接收数据到数据包中。
            byte[] buf = new byte[1024];
            DatagramPacket dp = new DatagramPacket(buf,buf.length);
            
            ds.receive(dp);
            
            //3,解析数据包中的具体数据。
            String ip = dp.getAddress().getHostAddress();
            int port = dp.getPort();
            String text = new String(dp.getData(),0,dp.getLength());
            System.out.println(ip+":::"+port+":::::"+text);
            
            //4,关闭资源。
            ds.close();
            System.out.println("udp 接收端关闭");
        }

    }
    发送端
    public class UDPSend {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {

            /*
             * 通过udp协议创建一个发送端。
             * 思路:
             * 1,应该有可以通过该协议传输数据的对象。先有udp服务。
             * 2,有数据,并将数据封装到数据包,并在包上明确目的地址。
             * 3,通过udp服务将这个数据包发出去。
             * 4,关闭资源。
             */
            System.out.println("udp 发送端开启");
            //1,创建udp socket服务.
            DatagramSocket ds = new DatagramSocket(8888);       
           
            //2,明确数据,并将数据封装到数据包中。
            String str = "udp演示,哥们来了";
            byte[] buf = str.getBytes();
            DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.252"),10000);
           
            //3,将数据包通过socket服务发送。
            ds.send(dp);
           
            //4,关闭资源。
            ds.close();
            System.out.println("udp 发送端关闭");
           
        }

    }



  • 相关阅读:
    Java.io.outputstream.PrintStream:打印流
    Codeforces 732F. Tourist Reform (Tarjan缩点)
    退役了
    POJ 3281 Dining (最大流)
    Light oj 1233
    Light oj 1125
    HDU 5521 Meeting (最短路)
    Light oj 1095
    Light oj 1044
    HDU 3549 Flow Problem (dinic模版 && isap模版)
  • 原文地址:https://www.cnblogs.com/QuestionsZhang/p/9686675.html
Copyright © 2011-2022 走看看