zoukankan      html  css  js  c++  java
  • Java基础知识强化之网络编程笔记03:UDP之UDP协议发送数据 和 接收数据

    1. UDP协议发送数据 和 接收数据

     UDP协议发送数据:
       创建发送端的Socket对象
       创建数据,并把数据打包
       调用Socket对象的发送方法,发送数据包
       释放资源

     UDP协议接收数据:

          • 创建接收端的Socket对象
           创建数据包,接收数据(接收容器)
           调用Socket对象的接收方法,接收数据包
           解析数据包,并显示在控制台
          • 释放资源

    2. 代码实现

    (1)首先我们先写发送端的程序,如下:

     1 package com.himi.udpDemo;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.InetAddress;
     7 import java.net.SocketException;
     8 import java.net.UnknownHostException;
     9 
    10 /**
    11  * 
    12  * UDP协议发送数据:
    13  * 1. 创建发送端的Socket对象
    14  * 2. 创建数据,并把数据打包
    15  * 3. 调用Socket对象的发送方法,发送数据包
    16  * 4. 释放资源
    17  *
    18  */
    19 public class UdpSendDemo {
    20     public static void main(String[] args) throws IOException {
    21         //创建发送端的Socket对象,这里使用的UDP使用的客户端的Socket对象类是DatagramSocket.
    22         //DatagramSocket:DatagramSocket()
    23         DatagramSocket ds = new DatagramSocket();
    24         
    25         //创建数据,并把数据打包
    26         //DatagramPacket:此类表示数据报包
    27         /**DatagramPacket(byte[] buf, int length, InetAddress address, int port) 
    28         **         构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
    29         */
    30         //创建数据
    31         byte[] bytes = "风云雄霸天下,风云必胜. 风云合璧,摩柯无量. 圣心诀,玄武真功".getBytes();
    32         //IP地址对象
    33         InetAddress address = InetAddress.getByName("49.123.72.145");
    34         //端口号
    35         int port = 10086;
    36         //数据打包
    37         DatagramPacket dp = new DatagramPacket(bytes, bytes.length, address, port);
    38         
    39             
    40         //调用Socket对象的发送方法,发送数据包
    41         //public void send(DatagramPacket p)
    42         ds.send(dp);
    43         
    44         
    45         //释放资源
    46         ds.close();
    47         
    48     }
    49 
    50 }

    (2)其次实现的是接收端的代码,如下:

     1 package com.himi.udpDemo;
     2 
     3 import java.io.IOException;
     4 import java.net.DatagramPacket;
     5 import java.net.DatagramSocket;
     6 import java.net.InetAddress;
     7 
     8 /**
     9  * 
    10  * UDP协议接收数据:
    11  * 1. 创建接收端的Socket对象
    12  * 2. 创建数据包,接收数据(接收容器)
    13  * 3. 调用Socket对象的接收方法,接收数据包
    14  * 4. 解析数据包,并显示在控制台
    15  * 5. 释放资源
    16  *
    17  */
    18 
    19 public class UdpReceiveDemo {
    20 
    21     public static void main(String[] args) throws IOException {
    22         // 创建接收端的Socket对象
    23         //DatagramSocket(int port):创建数据报套接字并将其绑定到本地主机上的指定端口
    24         DatagramSocket ds = new DatagramSocket(10086);
    25         
    26         //创建数据包,接收数据(接收容器)
    27         //DatagramPacket(byte[] buf, int length)
    28         byte[] bytes = new byte[1024];
    29         int length  = bytes.length;
    30         
    31         DatagramPacket dp = new DatagramPacket(bytes, length);
    32         
    33         //调用Socket对象的接收方法,接收数据包
    34         // public void receive(DatagramPacket p)  
    35         ds.receive(dp);//阻塞式方法
    36         
    37         //解析数据包,并显示在控制台
    38         //获取对方的IP
    39         //public InetAddress getAddress()
    40         InetAddress address = dp.getAddress();
    41         String IP = address.getHostAddress();
    42         
    43         //public byte[] getData():获取数据的缓冲区
    44         //public int getLength():获取数据的实际长度
    45         byte[] bys = dp.getData();
    46         int len = dp.getLength();
    47         String s = new String(bys,0,len);
    48         
    49         System.out.println("发送端"+IP+"的数据:"+s);
    50         
    51         
    52         //释放资源
    53         ds.close();
    54         
    55                 
    56 
    57     }
    58 
    59 }

    (3)运行:

    -->先运行接收端(类似于先开启服务器

    -->再运行发送端,这个时候,上面的接收端控制台,就会显示发送端发送过来的数据,效果如下:

  • 相关阅读:
    osg::BlendFunc来设置透明度
    LCA(Tarjan)
    CODEVS1073 家族 (并查集)
    CODEVS1533 互斥的数(哈希表)
    2014-12-4
    BZOJ2661 连连看 (费用流)
    2014-11-30
    JAVA语法基础作业——动手动脑以及课后实验性问题
    课后作业01——相加
    再读大道至简第二章
  • 原文地址:https://www.cnblogs.com/hebao0514/p/4858969.html
Copyright © 2011-2022 走看看