栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

UDP通信程序

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

UDP通信程序

UDP通信程序
    • UDP通信原理
      • 一. 定义
        • DatagramSocket类简单介绍
        • DatagramPacket类简单介绍
      • 二. 发送数据的步骤
      • 三. 接受数据的步骤:

UDP通信原理 一. 定义
  • UDP协议是一种不可靠的网络协议,它在通信的两端各建立了一个Socket对象,但是这两个Socket只是发送,接收数据的对象,

  • 因此对于基于UDP协议的通信双方而言,没有所需的客户端和服务器的概念

  • Java提供了DatagramSocket类作为基于UDP协议的Socket,以及数据包类DatagramPacket类

DatagramSocket类简单介绍


构造方法:

DatagramPacket类简单介绍

二. 发送数据的步骤
  1. 创建发送端的Socket对象(DatagramSocket)
    DatagramSocket()

  2. 创建数据,并把数据打包
    DatagramPacket(byte[] buf,int length,InetAddress address,int port)

  3. 调用DatagramSocket对象的方法发送数据
    void send(DatagramPacket p);//发送数据报包

  4. 关闭发送端
    void close();关闭此数据报套接字

  • 代码内容实现:(注意端口号)
package Demo;

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

public class SendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端的Socket对象(DatagramSocket)
        DatagramSocket ds = new DatagramSocket();

        //创建数据,并把数据打包

        //DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
        //构造用于发送长度的分组数据报包 length具有偏移 ioffset指定主机上到指定的端口号
        byte[] buf ="hello,udp,我来了".getBytes();
        int length = buf.length;
        InetAddress address = InetAddress.getByName("192.168.137.1");
        int port=1111;
        DatagramPacket dp = new DatagramPacket(buf,length,address,port);

        //调用DatagramSocket对象的方法发送数据,void send(DatagramPacket p);发送数据报包
        ds.send(dp);


        //关闭发送端
        ds.close();
    }
}

三. 接受数据的步骤:
  1. 创建接收端的Socket对象(DatagramSocket)
    DatagramSocket(int port)

  2. 创建一个数据包,用于接收数据
    DatagramPocket(byte[] but,int length)

  3. 调用DatagramSocket对象的方法接收数据
    void receive(DatagramPacket p)

  4. 解析数据包,并把数据在控制台显示
    byte[] getData()返回数据缓冲区
    int getLength()返回要发送的数据的长度或接收到的数据的长度。

  5. 关闭接收端
    void close()

  • 代码内容实现:(注意端口号)
package Demo;

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

public class ReceiveDemo {
    public static void main(String[] args) throws IOException {
        //创建接收端的Socket对象(DatagramSocket)
        DatagramSocket dg = new DatagramSocket(1111);

        //创建一个数据包,用于接收数据
        byte[] bytes = new byte[1024];//一次接收1024个字节数据足以够
        int length = bytes.length;//数据的长度
        DatagramPacket dp = new DatagramPacket(bytes, length);

        //调用DatagramSocket对象的方法接收数据
        dg.receive(dp);

        //解析数据包,并把数据在控制台显示
        byte[] data = dp.getData();//返回数据缓冲区
        int len = dp.getLength();//返回要发送的数据的长度或接收到的数据的长度
        String s = new String(data, 0, len);//利用字符串的形式输出
        System.out.println(s);//直接输出s,是因为s.toString()方法重写了

        //关闭接收端
        dg.close();

    }
}
  • 步骤输出的内容(我之前将发送和接收端口号弄为一致,相当于我给自己发送东西):
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/871669.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号