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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • QueueUserWorkItem_thread.currentthread()

    QueueUserWorkItem_thread.currentthread()usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespaceTestThreadPool{usingSystem.Threading;classProgram{staticvoidMain(string[

    2022年9月25日
    0
  • VMware虚拟机ubuntu显示屏幕太小解决办法

    VMware虚拟机ubuntu显示屏幕太小解决办法使用VMware安装的ubuntu虚拟机的显示屏幕太小,可以通过在VMware里安装“VMwareTool”插件解决,安装步骤记录一下。1.更改ISO文件路径安装VMwareTool需要用到虚拟光驱,加载一个ISO文件,在安装的时候加载的是ubuntu安装文件“ubuntu-16.04.2-desktop-amd64.iso”,如果不更改这个加载路径,相当于在虚拟机

    2022年6月7日
    52
  • Window基础(黑客基础)

    Window基础(黑客基础)一、Window重要目录1.ProgramData:C:\ProgramData是个公用的被创建文件夹或文件存放的地方,这些文件夹或文件仅由创建者完整控制。programdata是电脑C盘的一个系统文件夹2.ProgramFiles和ProgramFiles(86):程序软件默认安装目录,它们的区别是前者是安装64位软件,后者是安装32位软件3.Window:系统安装目录4….

    2022年5月2日
    36
  • NFS原理详解_简述NFS服务的工作流程

    NFS原理详解_简述NFS服务的工作流程【mike:前面大概看了看,后面看不懂】source:http://blog.51cto.com/atong/1343950NFS原理详解原创woshiliwentong2013-12-2312:17评论(4)24682人阅读PS:哈哈,这篇的篇幅真的非常的长。要看完真的要有很强的耐心那。我自己写也快写吐了呢。[ATon

    2022年10月26日
    0
  • python字典详解_python字典get方法

    python字典详解_python字典get方法字典字典的key和value一一对应的,字典是可变的,也是有序的(python3.6版本开始字典有序),可迭代的增加元素当key不存在时,直接赋值a={"status"

    2022年7月31日
    3
  • 算法学习笔记之一阶低通滤波算法

    算法学习笔记之一阶低通滤波算法1.一阶滤波算法的原理一阶滤波,又叫一阶惯性滤波,或一阶低通滤波。是使用软件编程实现普通硬件RC低通滤波器的功能。一阶低通滤波的算法公式为:Y(n)=αX(n)(1-α)Y(n-1)式中:α=滤波系数;X(n)=本次采样值;Y(n-1)=上次滤波输出值;Y(n)=本次滤波输出值。一阶低通滤波法采用本次采样值与

    2022年6月11日
    198

发表回复

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

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