DatagramSocket类简单使用

DatagramSocket类简单使用importorg.junit.Test;importjava.io.*;importjava.net.DatagramPacket;importjava.net.DatagramSocket;importjava.net.InetSocketAddress;/***@author*@date2019/7/23*/publicclassTestUd…

大家好,又见面了,我是你们的朋友全栈君。

import org.junit.Test;

import java.io.*;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;

/**
 * @author
 * @date 2019/7/23
 */
public class TestUdp {

    /**
     * udp 发送数据:
     * 1.建立DatagramSocket通信,占用端口建立通信
     * 2.创建数据包DatagramPacket,指定数据包发向的端口,不会发生端口占用行为
     * 3.发送行为
     * 4.关闭通信
     *
     * @param
     * @return
     * @author
     * @date 2019/7/23 10:51
     */
    @Test
    public void udpSend() throws IOException {
        DatagramSocket datagramSocket = new DatagramSocket(9999);
        String msg = "msg msg66666666666666!";
        DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), msg.getBytes().length, new InetSocketAddress("localhost", 6666));
        datagramSocket.send(datagramPacket);
        datagramSocket.close();
    }

    /**
     * udp 接收数据:
     * 1.建立通信DatagramSocket,占用端口建立通信。注意:该连接监听接收端口为发送一方的DatagramPacket的传输端口
     * 2.创建数据包DatagramPacket;仅作为接收数据的存储,无需再监听端口
     * 3.接收行为
     *  3.1 进入循环后receive方法在没有收到发送数据时进行堵塞,收到则通过
     *  3.2 接收的数据及接收数据的实际长度由获取到的实际数据包datagramPacket获取
     * 4.关闭通信
     *
     * @param
     * @return
     * @author
     * @date 2019/7/23 10:51
     */
    @Test
    public void udpRecive() throws IOException {
        DatagramSocket client = new DatagramSocket(6666);   //step 1
        byte[] bytes = new byte[1024];
        DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
        int count = 0;
        while (count < 3) {
            System.out.println("into circle!");
            client.receive(datagramPacket);  //step 3.1
            System.out.println("passed receive!");
            byte[] data = datagramPacket.getData();     //step 3.2
            int length = datagramPacket.getLength();    //step 3.2

            System.out.println(count + "times received data:" + new String(data, 0, length));
            count++;
        }
        System.out.println("接收次数用完,退出程序!");
        client.close();
    }

}

流程总结:建立通信(对应释放通信动作),建立数据存储对象(包,缓冲区等),具体操作(关联通信与数据存储对象,再执行具体行为)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134226.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 代理服务器基本知识[通俗易懂]

    代理服务器基本知识[通俗易懂]代理服务器系列(一):基础知识2005年9月10日世界网络教研组编一、什么是代理服务器?代理服务器英文全称是ProxyServer,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,需送出Request信号来得到回答,然后对方再把信息以bit方

    2022年4月30日
  • 怎么判断草图完全约束_算法基础课acwing下载

    怎么判断草图完全约束_算法基础课acwing下载爱丽丝和鲍勃正在玩以下游戏。首先,爱丽丝绘制一个 N 个点 M 条边的有向图。然后,鲍勃试图毁掉它。在每一步操作中,鲍勃都可以选取一个点,并将所有射入该点的边移除或者将所有从该点射出的边移除。已知,对于第 i 个点,将所有射入该点的边移除所需的花费为 W+i,将所有从该点射出的边移除所需的花费为 W−i。鲍勃需要将图中的所有边移除,并且还要使花费尽可能少。请帮助鲍勃计算最少花费。输入格式第一行包含 N 和 M。第二行包含 N 个正整数,第 i 个为 W+i。第三行包含 N 个正整数,第.

    2022年8月9日
  • python——pkl文件

    python——pkl文件pkl文件是python里面保存文件的一种格式,如果直接打开会显示一堆序列化的东西。cPickle在python3中更名为pickle使用方式如下:importpickleaspshoplistfile=’shoplist.data’#保存文件数据所在文件的文件名shoplist=[‘apple’,’mango’,’carrot’]f=open(shoplistfile,’wb’)#二进制打开,如果找不到该文件,则创建一个p.dump(shoplist,f)

    2022年9月8日
  • jdk1.8 特性_jdk1.7和1.8的区别

    jdk1.8 特性_jdk1.7和1.8的区别一.什么是stream?1.概述Java8API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。这种风格将要处理的元素集合看作一种流,流在管道中传输,并且可以在管

    2022年8月16日
  • C#网络编程(基本概念和操作) – Part.1

    C#网络编程(基本概念和操作) – Part.1

    2021年8月30日
  • Pycharm激活方法(active code)

    Pycharm激活方法(active code)第一步,将“0.0.0.0 account.jetbrains.com”添加到hosts文件中第二步,输入activecode,提交详情见:http://idea.lanyus.com/

    2022年8月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号