首页 > 编程语言 >Java使用UDP协议进行通信的例子

Java使用UDP协议进行通信的例子

时间:2022-11-17 19:01:27浏览次数:48  
标签:DatagramSocket UDP DatagramPacket Java localport 接收端 例子 IOException new

UDP是不可靠但是高效的一种传输协议,不管你接收端在不在,丢进去就行了。

传输过程:

发送端:

/**
 * 发送端
 * 1.使用  DatagramSocket 指定端口  创建发送端
 * 2.准备数据,转成字节数组
 * 3.封装成  DatagramPacket 包裹,指定目的地
 * 4.发送包裹  send(DatagramPacket  p)
 * 5.释放资源
 */

接收端:

/**
 * 接收端
 * 1.使用DatagramSocket 指定端口  创建接收端
 * 2.准备容器  封装成DatagramPacket包裹
 * 3.阻塞式接受包裹receive(DatagramPacket  p)
 * 4.分析数据
 *      byte[]   getData()
 *               getLength()
 * 5.释放资源
 */

 

例子:实现了在本机上,不同端口之间的通信。

实现接收代码:

public class MyServe {
    private final int localport;

    /**
     * @param localport 接收端使用的端口号
     */
    public MyServe(int localport) {
        this.localport = localport;
    }

    //接收端
    void server() throws IOException {
        // 1.使用DatagramSocket 指定端口  创建接收端
        DatagramSocket server = new DatagramSocket(this.localport);
        //2.准备容器  封装成DatagramPacket包裹
        byte[] container= new byte[1024*60];
        DatagramPacket packet = new DatagramPacket(container,0,container.length);
        while (true) {
            //3.阻塞式接受包裹receive(DatagramPacket  p)
            server.receive(packet);
            // 4.分析数据
            String data = new String(packet.getData(), 0, packet.getLength());
            System.out.println("对面说:" + data);
            if(data.equals("byby")){
                System.out.println("对面离开了聊天室");
                break;
            }
        }
        // 5.释放资源
        server.close();
    }
}
查看代码

实现发送代码:

public class MyClint {
    private final int localport;
    private int destPort;
    private String destAddress;

    /**
     *
     * @param localport 发送端使用的端口号
     * @param destPort  目的地端口号
     * @param destAddress  目的地地址
     */
    public MyClint(int localport, int destPort, String destAddress) {
        this.localport = localport;
        this.destPort = destPort;
        this.destAddress = destAddress;
    }

    //发送端
    void client() throws IOException {
        // 1.使用DatagramSocket 指定端口  创建发送端
        DatagramSocket client = new DatagramSocket(this.localport);
        BufferedReader bd=null;
        bd= new BufferedReader(new InputStreamReader(System.in));
        while (true) {
            // 2.准备数据,转成字节数组
            String data = bd.readLine();
            byte[] datas = data.getBytes();
            // 3.封装成DatagramPacket包裹,指定目的地
            DatagramPacket packet = new DatagramPacket(
                    datas,
                    0,
                    datas.length,
                    new InetSocketAddress(this.destAddress, this.destPort));
            // 4.发送包裹send(DatagramPacket  p)
            client.send(packet);
            if(data.equals("byby")){break;}
        }
        if(bd!=null)  bd.close();
        // 5.释放资源
        client.close();
    }
}
查看代码

用户一:

public class User1 {
    public static void main(String[] args) throws IOException {
        //开启发送端服务
        new Thread(()-> {
            try {
                new MyClint(8787,
                        8888,
                        "localhost").client();
            } catch (IOException e) { e.printStackTrace(); }
        }).start();
        //开启接收端服务
        new Thread(()-> {
            try {
                new MyServe(9999).server();
            } catch (IOException e) { e.printStackTrace(); }
        }).start();
    }
}
查看代码

用户二:

public class User2 {
    public static void main(String[] args) throws IOException {
        //开启发送端服务
        new Thread(()-> {
            try {
                new MyClint(7878,
                        9999,
                        "localhost").client();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
        //开启接收端服务
        new Thread(()-> {
            try {
                new MyServe(8888).server();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }).start();
    }
}
查看代码

启动用户一和用户二后,运行结果:

 

标签:DatagramSocket,UDP,DatagramPacket,Java,localport,接收端,例子,IOException,new
From: https://www.cnblogs.com/lurenjia-bky/p/16900468.html

相关文章

  • java 对象比较 返回不相同的值
    ////Sourcecoderecreatedfroma.classfilebyIntelliJIDEA//(poweredbyFernFlowerdecompiler)//packagecom.soooft.common.equator;importjava.util......
  • VS Code编辑器调试Java总结
    1背景最近在从Go程序员切换成Java程序员,在前期需要解决的一个重要问题就是在VSCode编辑器中如何进行Java代码的调试。调试,是程序员的必备基础日常技能。参加工作以来,......
  • mac elasticsearch could not find java in bundled jdk 官方解决方案
    1.执行 ./bin/elasticsearch 报未找到JDK2.检查java-version 存在  3.exportJAVA_HOME=/usr/bin/java 无效 官方文档https://www.elastic.co/guid......
  • FFmpeg Java录制windows USB摄像头
    一、版本<dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.8</version></dependency><dependency><g......
  • 2022.11.17 Java 面向对象的介绍
    属性+方法=类面向过程与面向对象不可分割,面向对象是由一个个面向过程组成,就像教育部由一个个老师组成。面向对象的本质:以类的方式组织代码,以对象的形式组织(封装)数据;......
  • 自学Java注意,注意细节快速掌握
    自学Java必须注意的问题    第一,刚开始学Java编程的时候,确实挺嘈人的,一个非常小的问题,可能就是一个字母拼错了,你就是找不出问题在哪里,这是每个初学者都会面临的问......
  • JavaScript语法-特殊语法、流程控制语句
    JavaScript语法-特殊语法<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>特殊语法</title><script>//1、语句以;结尾.......
  • 黏包、udp协议、多道技术、进程并行与并发
    目录黏包现象struct模块黏包代码实战UDP协议(了解)并发编程理论多道技术进程理论进程的并行与并发进程的三状态黏包现象1.服务端连续执行三次recv2.客户端连续执行三次sen......
  • JavaScript对象RegExp1和GloBal
    JavaScript对象_RegExp1RegExp:正则表达式对象1.正则表达式:定义字符串的组成规则1.单个字符:[]如:[a][ab][a-zA-Z0-9]......
  • JavaScript简介和JavaScript发展史
    JavaScript简介:概念:一门客户端脚本语言运行在客户端浏览器中的。每一个浏览器都有Javascript的解析引擎脚本语言:不需要编译,直接就可以被浏览器解析执行了功能︰可以来......