发送和接受udp

DatagramPacket

通信时发送端和接收端不用建立连接。UDP通信的过程就像是货运公司在两个码头间发送货物一样。在码头发送和接收货物时都需要使用集装箱来装载货物,UDP通信也是一样,发送和接收的数据也需要使用“集装箱”进行打包,为此JDK中提供了一个DatagramPacket类,该类的实例对象就相当于一个集装箱,用于封装UDP通信中发送或者接收的数据。

DatagramSocket

DatagramPacket数据包的作用就如同是“集装箱”,可以将发送端或者接收端的数据封装起来。然而运输货物只有“集装箱”是不够的,还需要有码头。在程序中需要实现通信只有DatagramPacket数据包也同样不行,为此JDK中提供的一个DatagramSocket类。DatagramSocket类的作用就类似于码头,使用这个类的实例对象就可以发送和接收DatagramPacket数据包,发送数据的过程如下图所示。

%title插图%num

udp发送端

package cn.hiluna.demo1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * 实现UDP协议的发送端
 *  实现封装数据的类 java.net.DatagramPacket  将数据包装起来
 *  实现数据传输的类 java.net.DatagramSocket  将数据包发出去
 *
 * 实现步骤:
 *  1.创建DatagramPacket对象,封装数据,接受的地址和端口
 *  2.创建DatagramSocket对象
 *  3.调用DatagramSocket类方法send,发送数据包
 *  4.关闭资源
 *
 *  DatagramPacket构造方法
 *      DatagramPacket(byte[] buf,int length,InetAddress address,int port)
 *  DatagramSocket构造方法:
 *      DatagramSocket()空参数
 *      方法:send(DatagramPacket d)
 */
public class UDPSend {
    public static void main(String[] args) throws IOException {
        //创建数据包对象,封装要发送的数据,接收端ip,端口
        byte[] date = "你好UDP".getBytes();
        //创建InetAddress对象,封装自己的IP
        InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
        DatagramPacket datagramPacket = new DatagramPacket(date,date.length,inetAddress,6000);
        //创建DatagramSocket对象
        DatagramSocket datagramSocket = new DatagramSocket();
        //使用DatagramSocket类的方法send 发送数据
        datagramSocket.send(datagramPacket);
        //关闭资源
        datagramSocket.close();
    }
}

udp接收端

package cn.hiluna.demo1;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;

/**
 * 实现UDP接收端
 *      实现封装数据包java.net.DatagramPacket 将数据接受
 *      实现数据传输 java.net.DatagramSocket 接受数据包
 *
 *  实现步骤:
 *      1.创建DatagramSocket对象,绑定端口号
 *          和发送端的端口号一致
 *      2.创建字节数组,接受发来的数据
 *      3.创建数据包对象DatagramPacket
 *      4.调用DatagramSocket对象方法receive(DatagramPacket dp)
 *          接受数据,并将数据放在数据包中
 *      5.拆包
 *          发送的IP地址
 *              数据对象DatagramPacket方法getAddress()获取的是发送端的ip地址对象
 *              返回值是InetAddress对象
 *          接受到的字节个数
 *              数据包对象DatagramPacket方法getLength()
 *          发送方的端口号
 *              数据包对象DatagramPacket方法getPort()获取发送端口
 *      6.关闭资源
 */
public class UDPReceive {
    public static void main(String[] args) throws IOException {
        //创建数据包传输对象DatagramSocket 绑定端口号
        DatagramSocket datagramSocket = new DatagramSocket(6000);
        //创建字节数组
        byte[] data = new byte[1024];
        //创建数据包对象,传递字节数组
        DatagramPacket datagramPacket = new DatagramPacket(data,data.length);
        //调用ds对象的方法receive传递数据包
        datagramSocket.receive(datagramPacket);
        //获取发送端的ip地址对象
        String ip = datagramPacket.getAddress().getHostAddress();
        //获取发送端口号
        int port = datagramPacket.getPort();
        //获取接受到的字节个数
        int lenght = datagramPacket.getLength();
        System.out.println(new String(data,0,lenght)+"..."+ip+"..."+port);
        datagramSocket.close();




    }
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇