zoukankan      html  css  js  c++  java
  • Java中通过UDP协议发送和接受数据

    UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议。它是面向非连接的协议,它不与对方建立连接,而是直接就把数据包发送过去!

    UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境。正因为UDP协议没有连接的过程,所以它的通信效率高;但也正因为如此,它的可靠性不如TCP协议高。QQ就使用UDP发消息,因此有时会出现收不到消息的情况。

    一、UDP协议发送数据

    发送处理过程:

    1. 创建发送端Socket对象——DatagramSocket
    2. 创建数据并将数据打包到DatagramPacket对象
    3. 通过Socket发送
    4. 释放相关资源

    发送处理代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    public class TestUDPSend {
       
    public static void main(String[] args) {
           
    String data="hello UDP";
            DatagramSocket datagramSocket=null;
           
    try {
               
    //实例化套接字,并指定发送端口
                datagramSocket=new DatagramSocket(8080);
               
    //指定数据目的地的地址,以及目标端口
                InetAddress destination=InetAddress.getByName("localhost"); 
                DatagramPacket datagramPacket=
                       
    new DatagramPacket(data.getBytes(), data.getBytes().length,destination,8081);
               
    //发送数据
                datagramSocket.send(datagramPacket);
            }
    catch (SocketException e) {
                e.printStackTrace();
            }
    catch (IOException e) {
                e.printStackTrace();
            }
    finally{
                datagramSocket.close();
            }
        }
    }

    二、UDP协议接收数据

    接受处理过程:

      1. 创建接受端Socket对象——DatagramSocket
      2. 创建包DatagramPacket对象(数据接收容器)
      3. 调用接受方法接受数据
      4. 解析数据包对象,取出接受到的信息
      5. 释放资源

    接受处理代码:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class TestUDPReceive {
      
    public static void main(String[] args) {
           DatagramSocket datagramSocket=null;
          
    try {
              
    //监视8081端口的内容
               datagramSocket=new DatagramSocket(8081);
              
    byte[] buf=new byte[1024];
               
              
    //定义接收数据的数据包
               DatagramPacket datagramPacket=new DatagramPacket(buf, 0, buf.length);
               datagramSocket.receive(datagramPacket);
               
              
    //从接收数据包取出数据
               String data=new String(datagramPacket.getData() , 0 ,datagramPacket.getLength());
               System.out.println(data);
           }
    catch (SocketException e) {
               e.printStackTrace();
           }
    catch (IOException e) {
               e.printStackTrace();
           }
    finally {
               datagramSocket.close();
           }      
       }
    }

    运行:

    先运行接收端,让程序监听8081端口,然后运行发送端发送数据到本机(localhost)的8081端口。

    之后会发现在接收端的控制台打印出 ‘hello UDP ’的内容。

  • 相关阅读:
    逻辑回归---sklearn
    逻辑回归---梯度下降法
    线回与非线回---线性回归标准方程法
    线回与非线回---sklearn--多项式回归
    线回与非线回---sklearn--多元线性回归
    web前端2020/1/20学习笔记
    web前端2020/1/18-2020/1/19学习笔记
    web前端2020/1/17学习笔记
    java2020/1/16学习笔记
    web前端2020/1/16学习笔记
  • 原文地址:https://www.cnblogs.com/elgin-seth/p/5293714.html
Copyright © 2011-2022 走看看