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

Java学习笔记—UDP通信

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

Java学习笔记—UDP通信

一、UDP通信原理
UDP协议(用户数据报协议 User Datagram Protocol)是一种无连接通信协议,
即在数据传输时数据发送端和接收端不建立逻辑链接。因此UDP协议是一种
不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个
Socket只是发送和接收数据的对象。它的通信双方也没有客户端和服务端
的概念。
二、UDP发送数据步骤
1、创建发送端的Socket对象
2、创建数据,并把数据打包
3、调用对象的方法发送数据
4、关闭发送端
三、UDP接收数据步骤
1、创建接收端Socket对象
2、创建数据包
3、接收数据
4、解析数据
5、关闭接收端
四、UDP通信案例
//发送端

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

public class UDPSendDemo {
    public static void main(String[] args) throws IOException {
        //创建发送端DatagramSocket对象
        //DatagramSocket()构造数据报套接字并将其绑定到本地主机上任何可用的端口
        DatagramSocket ds = new DatagramSocket();

        System.out.println("请输入要发送的数据:");
        //创建Scanner对象
        
        //自己封装键盘输入数据
        //static InputStream in “标准”输入流。
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        
        String line;
        while ((line = br.readLine())!= null) {
            if (line.equals("886")) {
                break;
            }
            //创建数据并打包
            byte[] bytes = line.getBytes();
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length,
                    InetAddress.getByName("192.168.1.5"),10801);
            //发送数据
            ds.send(dp);
        }

        //录入886之后关闭发送端
        ds.close();
    }
}


//UDP接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;


public class UDPReceiveDemo {
    public static void main(String[] args) throws IOException {
        //创建接收端对象
        DatagramSocket ds = new DatagramSocket(10801);

        //死循环,接收端一直等待接收数据
        while (true) {
            //创建数据包
            byte[] bytes = new byte[1024];
            DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
            //接收数据
            ds.receive(dp);
            //解析数据
            String str = new String(dp.getData(), 0, dp.getLength());
            System.out.println("接收到的数据是:" + str);

        }
    }
}
运行时,先运行接收端,然后在运行发送端。

由于上述的案例接收端添加了死循环一直等待发送端发送数据,所以没有关闭接
收端,所以最后需要我们手动去关闭哦!

运行结果:
请输入要发送的数据:
你好


接收到的数据是:你好

输入端输入:
请输入要发送的数据:
你好
886
发送端关闭

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/736634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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