UDP 发送与接收数据

 一:发送数据方法创建步骤:

1、创建DatagramSocket 对象 ds;

2、创建发送数据包 DatagramPacket 对象packet ;DatagramPacket构造函数选择DatagramPacket(byte buf[], int offset, int length, InetAddress address, int port),参数说明:

byte buf[]:发送数据字节数组, int offset:发送数据在buf[]中开始的偏移量,

int length:发送数据在buf[] 中的长度, InetAddress address:发送目标主机地址, int port:发送目标主机端口号;

3、调用ds对象的send(DatagramPacket packet )方法;

4、关闭DatagramSocket 调用ds.close();

一:接收数据方法创建步骤:

1、创建DatagramSocket 对象 ds 选择DatagramSocket(int port)构造函数;参数说明:port为监听端口;

2、定义数据缓冲区byte[] buf=new byte[1024];

3、定义接收数据包 DatagramPacket dp = new DatagramPacket(buffer, buffer.length);

4、调用ds.receive(dp)往接收数据包写数据;

5、byte[] message=dp.getData()读出数据包的数据

 二:demo代码如下:

public class ReceiverUdP {
    private static final int PORT = 8909;
    public static void main(String[] args) throws Exception {
        receiver();
        BufferedReader buff = new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            String message = buff.readLine();
            if (message.equals("over")) {
                System.exit(-1);
            }
            send(message);
        }
    }
    private static void send(String message) {
        new Thread(() -> {
            try {
                DatagramSocket ds = new DatagramSocket();
                byte[] massageBuff = message.getBytes();
                DatagramPacket packet = new DatagramPacket(massageBuff, 0, massageBuff.length, InetAddress.getLocalHost(), PORT);
                System.out.println("send message::" + message);
                ds.send(packet);
                ds.close();
            } catch (Exception e) {
                System.out.println("Exception::" + e.getMessage());
            }
        }).start();
    }
    private static void receiver(){
        new Thread(()->{
            try {
                DatagramSocket ds = new DatagramSocket(PORT);
                while (true) {
                    byte[] buffer = new byte[1024];
                    DatagramPacket dp = new DatagramPacket(buffer, buffer.length);
                   //receive为阻塞试方法
                    ds.receive(dp);
                    String message=new String( dp.getData(),0,dp.getLength());
                    String ip=dp.getAddress().getHostAddress();
                    int port=dp.getPort();
                    String receiverMassage=String.format("receiver message::%s -> from %s ip :: port::",message,ip,port+"");
                    System.out.println(receiverMassage);
                }
            }catch (Exception e){
                System.out.println("Exception::"+e.getMessage());
            }
        }).start();
    }
}

三、UDP的特点如下:

1、发送速度快(不需要建立连接);

2、发送数据包有大小限制最大可以发64k的数据;

3、发送数据不安全,不管接收方在不在都发送; 

百度说明:

UDP的特点:
UDP协议使用IP层提供的服务把从应用层得到的数据从一台主机的某个应用程序传给网络上另一台主机上的某一个应用程序。
UDP协议有如下的特点:
1、UDP传送数据前并不与对方建立连接,即UDP是无连接的,在传输数据前,发送方和接收方相互交换信息使双方同步。
2、UDP不对收到的数据进行排序,在UDP报文的首部中并没有关于数据顺序的信息(如TCP所采用的序号),而且报文不一定按顺序到达的,所以接收端无从排起。
3、UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据。
4、UDP传送数据较TCP快速,系统开销也少。
从以上特点可知,UDP提供的是无连接的、不可靠的数据传送方式,是一种尽力而为的数据交付服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值