zoukankan      html  css  js  c++  java
  • Java网络通信编程-UDP

    1.对于TCP和UDP主要是两种不同的协议,前者是“面向连接”,“安全可靠”,“不限制大小,大数据传输”,‘效率低’,后者是“面向无连接”,“速度快”,“不安全,不可靠”,“限制大小在64K”,“效率高”。

    2.端口地址在0~65535之间,其中0~1023之间的端口是用于一些知名的网络服务和应用,用户的普通网络应用程序应该使用1024以上的端口。

    3.使用UDP主要涉及的对象有DatagramSocket,DatagramPacket,InetAddress。下面是UDP案例,代码如下:

    client端:

    package com.net;
    
    import java.io.IOException;
    import java.net.*;
    
    /** UDP通信-client
     * Created by lichangyun on 2020/7/17.
     */
    public class UdpClient {
        public static void main(String[] args) throws SocketException, UnknownHostException {
    
    //        创建DatagramSocket
            DatagramSocket ds=new DatagramSocket();
    
    //        创建DatagramPacket,打包
            String msg="我爱编程!";
            byte[] bytes = msg.getBytes();
            InetAddress address = InetAddress.getByName("127.0.0.1");
            int port=1000;
    
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
    
            try {
    //        建立联系
                ds.send(dp);
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                ds.close();
            }
        }
    }

    server端:

    package com.net;
    
    import java.io.IOException;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    /**UDP-server
     * Created by lichangyun on 2020/7/20.
     */
    public class UdpServer {
        public static void main(String[] args) throws IOException {
    
    //        创建服务端对象
            DatagramSocket  ds= new DatagramSocket(1000);
    
    //        创建包
            byte[] bytes = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
    
    //        接受客户端的数据
            ds.receive(dp);
    
    //        打印到控制台
            System.out.println("接受到的数据:   "+new String(bytes,0,bytes.length));
    //        释放资源
            ds.close();
    
        }
    }

     下面来看看组播的代码实现,组播地址:224.0.0.0.-239.255.255.255,其中224.0.0.0.-224.0.0.255为预留的组播地址。涉及到组播的客户端步骤如下:

    1.创建发送端DatagramSocket对象

    2.创建数据,并把数据打包(DatagramPacket )  

    3.调用DatagramSocket对象的方法发送数据(在组播中这里指定的是组播的地址)

    4.释放资源

    客户端代码如下:

    package com.net;
    
    import java.io.IOException;
    import java.net.*;
    
    /**
     * Created by lichangyun on 2020/7/21.
     */
    public class UdpZbClient {
        public static void main(String[] args) throws IOException {
    
            DatagramSocket ds = new DatagramSocket();
    
            String msg="hello 组播";
            byte[] bytes = msg.getBytes();
            int length = bytes.length;
            InetAddress address = InetAddress.getByName("224.0.1.0");
            int port=10000;
    
            DatagramPacket dp = new DatagramPacket(bytes, length, address, port);
    
            ds.send(dp);
    
            ds.close();
        }
    }

    涉及到组播的服务端步骤如下:

    1.创建客户端MulticastSocket对象

    2.创建DatagramPacket对象,用于接收数据

    3.调用MulticastSocket对象的接受方法,与DatagramPacket建立联系

    4.解析数据包

    5.释放资源

    服务端代码如下:

    package com.net;
    
    import java.io.IOException;
    import java.net.*;
    
    /**
     * Created by lichangyun on 2020/7/21.
     */
    public class UdpZbServer {
        public static void main(String[] args) throws IOException {
    
    //        组播对象
            MulticastSocket ms = new MulticastSocket(10000);
    
            byte[] bytes = new byte[1024];
            int length = bytes.length;
            InetAddress address = InetAddress.getByName("224.0.1.0");
    
            DatagramPacket dp = new DatagramPacket(bytes, length);
    
            ms.joinGroup(address);
    
            ms.receive(dp);
    
            byte[] data = dp.getData();
            int length1 = dp.getLength();
    
            System.out.println("组播接受到的数据:  "+new String(data,0,length1));
    
            ms.close();
        }
    }
  • 相关阅读:
    Python 字符串处理大全.
    图形化翻译助手
    爬虫详解
    Python 模块.
    定制序列
    Python 的property的实现 .
    Python的魔法方法 .
    通过类的装饰器以及各种单例模式(修复版本)。
    是时候写一下Python装饰器了。
    %E2%80%8C的字符串问题,卡住三个小时。
  • 原文地址:https://www.cnblogs.com/lichangyun/p/13351964.html
Copyright © 2011-2022 走看看