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 发送端关闭");
           
        }

    }



  • 相关阅读:
    区间K 大数查询
    最大最小公倍数
    吃糖果
    身份证号码升级
    威威猫系列之 吃鸡腿
    小Q系列之失恋
    查询7天之内的数据
    WebService案例 Spring boot+CXF开发WebService Demo
    开发过程中遇到问题
    oracle 自增序列 sequence
  • 原文地址:https://www.cnblogs.com/QuestionsZhang/p/9686675.html
Copyright © 2011-2022 走看看