Java基础之 04UDP协议通信示例165

本文深入解析UDP协议的特性,包括其无连接、不可靠的通信方式,以及数据报的发送与接收流程。通过示例代码展示如何在Java中实现UDP服务器与客户端,强调了客户端先启动的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络编程UDP协议
1、UDP协议概述
UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,
包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,
因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的,每个被传输的数据报必须限定在64KB之内。

主要使用以下的两个类:
DatagramPacket:此类表示数据报包。
DatagramSocket:此类表示用来发送和接收数据报包的套接字


2、UDP服务器与客户端程序
服务器端:
String info = “….”
// 将信息封装成数据报
byte[] bytes = info.getBytes();
DatagramPacket dp = new DatagramPacket(bytes, 0, bytes
.length(), InetAddress.getByName(“localhost”), 5000);// 客户端在5000端口监听
DatagramSocket server = new DatagramSocket(3000);// 服务器的端口
server.send(dp);// 发送数据报
server.close();
客户端:
byte b[] = new byte[1024];// 接收内容
DatagramPacket dp = new DatagramPacket(b, b.length);// 接收内容
// 客户端在5000端口等待
DatagramSocket client = new DatagramSocket(5000);
client.receive(dp); // 接收内容
System.out.println(new String(dp.getData(), 0, dp.getLength()));
client.close();


package com.vince;

import com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector;

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

/**
 * Created by vince on 2017/6/7.
 */
public class UDPServerDemo {

    public static void main(String[] args) {

        String info = "good good 学习,天天 UP";
        byte[] bytes = info.getBytes();
        try {
            //封装一个数据报包
            /*
            buf - 数据包数据。
            offset - 分组数据偏移量。
            length - 分组数据长度。
            address - 目的地址。
            port - 目的端口号。

             */
            DatagramPacket dp = new DatagramPacket(
                    bytes,
                    0,
                    bytes.length,
                    InetAddress.getByName("127.0.0.1"),
                    8000);
            //本程序的端口
            DatagramSocket socket = new DatagramSocket(9000);
            socket.send(dp);
            socket.close();
        }catch (UnknownHostException|SocketException e){
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

package com.vince;

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

/**
 * Created by vince on 2017/6/7.
 * 客户端
 */
public class UDPClientDemo {
    public static void main(String[] args) {

        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
        try {
            DatagramSocket socket = new DatagramSocket(8000);
            System.out.println("正在接收数据中...");
            socket.receive(dp);//接收数据
            String s = new String(dp.getData(),0,dp.getLength());
            System.out.println(s);
            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

这里注意UDP
一定要客户端先启动
即接收方先跑起来 等待接收数据
在这里插入图片描述
然后Server端再启动
在这里插入图片描述
然后客户端 即接收方就收到数据了 用数据报包的方式发送数据
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值