使用UDP协议编写简单发送方和接收方Demo

Posted kdes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用UDP协议编写简单发送方和接收方Demo相关的知识,希望对你有一定的参考价值。

(1)使用UDP协议编写简单发送方和接收方Demo

代码走完后结束运行,所以发送和接受都是一次运行就会结束。

一.编写UDP协议接收方

package demo.soket.udp;
  ?
  import java.io.IOException;
  import java.net.DatagramPacket;
  import java.net.DatagramSocket;
  import java.net.InetAddress;
  import java.net.SocketException;
  import java.net.UnknownHostException;
  ?
  /**
   * UDP协议发送方
   * UDP协议特点:
   * 1.数据打包
   * 2.不需要建立连接
   * 3.不可靠协议,接不接收都不会报错
   * 4.速度快
   * 5.数据包限制在64k
   */
  public class sendUdp {
      public static void main(String[] args) {
          /**
           *  DatagramSocket:用于UDP协议的socket
           *  
           *  1.创建对象,UDP协议
           *  2.把想要发送的的数据打包(并且不超过64k)
           *  3.数据发送 
           *  send(DatagramPacket p) 
           *  4.关闭连接
           */
          DatagramSocket ds=null;
          try {
              //1.创建对象 ,UDP协议
              ds=new DatagramSocket();
              /**
               * 2.把想要发送的的数据打包(并且不超过64k)
               * 构造用于发送长度的分组的数据报包 length指定主机上到指定的端口号。 
               */
              byte[] buf="UDP协议的demo测试数据".getBytes();
              InetAddress address=InetAddress.getByName("192.168.95.2");
              //指向接收方的ip和端口
              DatagramPacket p=new DatagramPacket(buf, buf.length, address, 10086);
              //3.数据发送 
              ds.send(p);
          } catch (SocketException e) {
              e.printStackTrace();
          } catch (UnknownHostException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }finally {
              //4.关闭连接
              if(ds!=null) {
                  ds.close();
              }
          }   
      }
  }

 


?

二.编写UDP协议服务端

 package demo.soket.udp;
  ?
  import java.io.IOException;
  import java.net.DatagramPacket;
  import java.net.DatagramSocket;
  import java.net.SocketException;
  import java.net.UnknownHostException;
  ?
  //UDP协议接收方
  public class receiveUdp {
      public static void main(String[] args) {
          /**
           *  1.创建接收方对象:new DatagramSocket(10086);需指定接收的端口
           *  2.创建一个数据包
           *  3.从DatagramPacket包中接收数据
           *  receive(DatagramPacket p) 从此套接字接收数据报包。 
           */
          DatagramSocket ds=null;
          try {
              //1.创建接收方对象,指定那个端口接收数据
              ds=new DatagramSocket(10086);
              //2.创建一个数据包,指定数据
              byte[] buf=new byte[1024];
              DatagramPacket dp=new DatagramPacket(buf, buf.length);
              //3.接收数据,阻塞方法
              ds.receive(dp);
              System.out.println("端口:"+dp.getPort());
              System.out.println("ip:"+dp.getAddress());
              //实际dp不一定有1024个字节
              byte[] b=dp.getData();
              //有多少取多少
              String str=new String(b, 0,dp.getLength());
              System.out.println("接收到的数据:"+str);
          } catch (SocketException e) {
              e.printStackTrace();
          } catch (UnknownHostException e) {
              e.printStackTrace();
          } catch (IOException e) {
              e.printStackTrace();
          }
          }
      }
  }
  ?

 

三 .demo运行

1.先运行服务端
2.其次运行发送方

技术图片

 

以上是关于使用UDP协议编写简单发送方和接收方Demo的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UDP 广播中处理同时作为发送方和接收方的客户端

第8章 传输层_TCP/UDP协议的应用场景

如何获得 ActiveMQ - 单个发送方和接收方的 FIFO 要求?

发送方和接收方的 google-cast-sdk 音频和字幕手动处理

TCP 与 UDP 协议简介

两类传输协议:TCP,UDP