UDP通信案例:实现收发数据


UDP通信案例:实现收发数据

UDP协议的特点

  • 面向无连接的协议
  • 发送端只管发送,不确认对方是否能收到。
  • 基于数据包进行数据传输。
  • 发送数据的大小限制64K以内
  • 因为面向无连接,速度快,但是不可靠。

UDP协议的使用场景

  • 即时通讯

  • 在线视频

  • 网络语音电话

UDP协议相关的两个类

* DatagramPacket

  • 数据包对象
  • 作用:用来封装要发送或要接收的数据,比如:集装箱

* DategramSocket

  • 发送对象
  • 作用:用来发送或接收数据包,比如:码头

DatagramPacket类构造方法

* DatagramPacket(byte[] buf, int length, InetAddress address, int port)

  • 创建发送端数据包对象

  • buf:要发送的内容,字节数组

  • length:要发送内容的长度,单位是字节

  • address:接收端的IP地址对象

  • port:接收端的端口号

    DatagramPacket(byte[] buf, int length)

  • 创建接收端的数据包对象

  • buf:用来存储接收到内容

  • length:能够接收内容的长度

DatagramPacket类常用方法

* int getLength() 获得实际接收到的字节个数

DatagramSocket类构造方法

* DatagramSocket() 创建发送端的Socket对象,系统会随机分配一个端口号。

* DatagramSocket(int port) 创建接收端的Socket对象并指定端口号

DatagramSocket类成员方法

* void send(DatagramPacket dp) 发送数据包

* void receive(DatagramPacket p) 接收数据包

发送者:

package com.liqiliang.demo02_实现收发数据;

import java.io.IOException;
import java.net.*;

//发送端
public class Sender {
    public static void main(String[] args) throws IOException {
        //1.封装要发送的数据:DatagramPacket
        //发送的信息
        byte[] msg ="你好我叫吴宇豪,我是傻X!".getBytes();

        //发送给自己电脑
        InetAddress localHost = InetAddress.getLocalHost();
        //发送给别人电脑
        InetAddress otherHost = InetAddress.getByName("192.168.37.14");

        //端口号
        int port = 8888;
        DatagramPacket dp=
            new DatagramPacket(msg,msg.length,otherHost,8888);

        //2.创建码头,发送数据:DatagramSocket
        DatagramSocket ds = new DatagramSocket();
        System.out.println("准备发送数据");
        ds.send(dp);
        System.out.println("发送数据完毕");
    }
}

接收者:

package com.liqiliang.demo02_实现收发数据;

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

public class Receiver {
    public static void main(String[] args) throws IOException {
        //1.准备一个空集装箱接收数据:DatagramPacket
        byte[] buff = new byte[1024];
        DatagramPacket dp = new DatagramPacket(buff,buff.length);

        //2.定义码头,接收对方发送的数据:DatagramSocket
        DatagramSocket ds = new DatagramSocket(8888);
        System.out.println("准备好接收信息了");
        ds.receive(dp);
        System.out.println("接收信息完毕........");

        int len = dp.getLength();
        //将收到的有效数据进行打印
        System.out.println(new String(buff,0,len));


    }
}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM