Java NIO DatagramChannel

  Java NIO DatagramChannel是可以发送和接收UDP数据包的通道。由于UDP是一种无连接网络协议,因此您不能默认读取和写入DatagramChannel其他通道。而是发送和接收数据包。

打开DatagramChannel

打开一个DatagramChannel代码

DatagramChannel channel = DatagramChannel.open();
channel.socket().bind(new InetSocketAddress(9999));

此示例打开DatagramChannel可以在UDP端口9999上接收数据包。

接收数据

可以通过DatagramChannel调用receive()方法来接收数据,如下所示:

ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear(); channel.receive(buf);

  receive()方法将将接收到的数据包的内容复制到给定的Buffer中。如果接收到的数据包包含的数据多于Buffer 可以容纳的数据,则剩下的数据将被静默地丢弃。

发送数据

可以通过DatagramChannel调用send()方法发送数据,如下所示:

String newData =“要写入文件的新字符串...”
+ System.currentTimeMillis(); ByteBuffer buf = ByteBuffer.allocate(48);
buf.clear();
buf.put(newData.getBytes());
buf.flip(); int bytesSent = channel.send(buf,new InetSocketAddress(“at.com”,80));

  此示例将字符串发送到UDP端口80上的“jenkov.com”服务器。尽管如此,该端口上没有监听任何内容,因此不会发生任何事情。您不会收到发送数据包是否收到的通知,因为UDP对数据传送没有任何保证。

连接到特定地址

  可以将a连接DatagramChannel到网络上的特定地址。由于UDP是无连接的,因此连接到地址的方式不会像TCP通道那样创建真正的连接。相反,它锁定你DatagramChannel,所以你只能从一个特定的地址发送和接收数据包。

例如:

channel.connect(new InetSocketAddress(“at.com”,80));

  连接时,您也可以使用read()write()方法,就像您使用传统渠道一样。您对发送的数据的交付没有任何保证。以下是几个例子:

int bytesRead = channel.read(buf);
int bytesWritten = channel.write(buf);

Java NIO学习笔记八 DatagramChannel的更多相关文章

  1. Java NIO学习笔记八 Pipe

    Java NIO Pipe Java NIO管道是两个线程之间的单向数据连接.Pipe 具有源信道和接受通道.您将数据写入sink通道.然后可以从源通道读取该数据. 这是一个原理的Pipe流程图: J ...

  2. Java NIO学习笔记

    Java NIO学习笔记 一 基本概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执 ...

  3. Java NIO 学习笔记(四)----文件通道和网络通道

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  4. Java NIO 学习笔记(一)----概述,Channel/Buffer

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  5. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

  6. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  7. Java NIO 学习笔记(七)----NIO/IO 的对比和总结

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  8. Java NIO 学习笔记(六)----异步文件通道 AsynchronousFileChannel

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  9. Java NIO 学习笔记(五)----路径、文件和管道 Path/Files/Pipe

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

随机推荐

  1. Django drf:视图层封装、ViewSetMixin、路由配置、解析器、响应器

    一.视图层封装 二.ViewSetMixin 三.路由配置 四.解析器 五.响应器 一.视图层封装 1.基本视图 写一个出版社的增删改查resfull接口 路由: url(r'^publish/$', ...

  2. YOLO---多个版本的简单认识

    YOLO---多个版本的简单认识 YOLOv3 有好几个经典版本了:一.YOLOv3 (Darknet)官网 @ https://github.com/pjreddie/darknet二.YOLOv3 ...

  3. 关闭Entity Framework的导航属性

    public RIS30Entities() : base("name=RIS30Entities") { this.Configuration.ProxyCreationEnab ...

  4. golang 2 ways to delete an element from a slice

    2 ways to delete an element from a slice yourbasic.org/golang Fast version (changes order) a := []st ...

  5. java 基础:方法调用中的值传递是call by value,并且传递的是参数的值的拷贝,而不是引用

    public class TestExtends { public static void main(String[]args){ int s = 10; System.out.println(Sys ...

  6. 数组的新方法 forEach some filter findIndex

    forEach  some  filter  findIndex这些都属于数组的新方法,都会对数组中的每一项,进行遍历,执行相关的操作: 只不过在循环的时候有些不一样 参考资料:https://wan ...

  7. XSS攻击(跨站攻击)

    漏洞描述 跨站脚本攻击(Cross-site scripting,简称XSS攻击),通常发生在客户端,可被用于进行隐私窃取.钓鱼欺骗.密码偷取.恶意代码传播等攻击行为.XSS攻击使用到的技术主要为HT ...

  8. JavaScript 基础知识 - BOM篇

    前言 本篇文章是JavaScript基础知识的BOM篇,如果前面的<JavaScript基础知识-DOM篇>看完了,现在就可以学习BOM了. 注意: 所有的案例都在这里链接: 提取密码密码 ...

  9. python2和python3编程差异杂谈(-)

    python2 默认编码ascii 在使用中文时要显示的声明   #-*-encoding:utf-8-*- python3 默认编码utf-8,良好的支持了中文输入 python2: print函数 ...

  10. 项目:JS实现简易计算器案例

    组件化网页开发下的: 步骤一:让页面动起来的JavaScript深入讲解  的 项目:JS实现简易计算器案例