12. Java NIO DatagramChannel 数据报通道
2016-11-19 00:00
585 查看
一个Java NIO DatagramChannel死一个可以发送、接收UDP数据包的通道。由于UDP是面向无连接的网络协议,我们不可用像使用其他通道一样直接进行读写数据。正确的做法是发送、接收数据包。
上述示例中,我们打开了一个DatagramChannel,它可以在9999端口上收发UDP数据包。
receive()方法会把接收到的数据包中的数据拷贝至给定的Buffer中。如果数据包的内容超过了Buffer的大小,剩余的数据会被直接丢弃。
上述示例会吧一个字符串发送到“jenkov.com”服务器的UDP端口80.目前这个端口没有被任何程序监听,所以什么都不会发生。当发送了数据后,我们不会收到数据包是否被接收的的通知,这是由于UDP本身不保证任何数据的发送问题。
看一个例子先:
当连接上后,可以向使用传统的通道那样调用read()和Writer()方法。区别是数据的读写情况得不到保证。下面是几个示例:
打开一个DatagramChannel(Opening a DatagramChannel)
打开一个DatagramChannel你这么操作:DatagramChannel channel = DatagramChannel.open(); channel.socket().bind(new InetSocketAddress(9999));
上述示例中,我们打开了一个DatagramChannel,它可以在9999端口上收发UDP数据包。
接收数据(Receiving Data)
接收数据,直接调用DatagramChannel的receive()方法:ByteBuffer buf = ByteBuffer.allocate(48); buf.clear(); **channel.receive(buf);**
receive()方法会把接收到的数据包中的数据拷贝至给定的Buffer中。如果数据包的内容超过了Buffer的大小,剩余的数据会被直接丢弃。
发送数据(Sending Data)
发送数据是通过DatagramChannel的send()方法:String newData = "New String to wrte to file..." +System.currentTimeMillis(); ByteBuffer buf = ByteBuffer.allocate(48); buf.clear(); buf.put(newData.getBytes()); buf.flip(); **int byteSent = channel.send(buf, new InetSocketAddress("jenkov.com", 80));**
上述示例会吧一个字符串发送到“jenkov.com”服务器的UDP端口80.目前这个端口没有被任何程序监听,所以什么都不会发生。当发送了数据后,我们不会收到数据包是否被接收的的通知,这是由于UDP本身不保证任何数据的发送问题。
链接特定机器地址(Connecting to a Specific Address)
DatagramChannel实际上是可以指定到网络中的特定地址的。由于UDP是面向无连接的,这种链接方式并不会创建实际的连接,这和TCP通道类似。确切的说,他会锁定DatagramChannel,这样我们就只能通过特定的地址来收发数据包。看一个例子先:
channel.connect(new InetSocketAddress("jenkov.com"), 80));
当连接上后,可以向使用传统的通道那样调用read()和Writer()方法。区别是数据的读写情况得不到保证。下面是几个示例:
int bytesRead = channel.read(buf);
int bytesWritten = channel.write(buf);
相关文章推荐
- Java Nio 十二、Java NIO DatagramChannel(数据报通道)
- Java-NIO(五):通道(Channel)的数据传输与内存映射文件
- Java基础知识强化之IO流笔记76:NIO之 Channel(通道)之间的数据传输
- Java-NIO(五):通道(Channel)的数据传输与内存映射文件
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java NIO系列教程(二) Channel原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO的通道类似流,但又有些不同: 既可以从通
- 08. Java NIO FileChannel 文件通道
- Java NIO系列教程(十) Java NIO DatagramChannel
- Java NIO DatagramChannel
- Java NIO Java NIO DatagramChannel
- Java NIO系列教程(十) Java NIO DatagramChannel
- Java NIO DatagramChannel
- java NIO入门简介 Buffer(缓冲区)与Channel(通道)的相关知识
- Java nio 学习笔记(一) Buffer(缓冲区)与Channel(通道)的相关知识
- Java NIO DatagramChannel
- Java NIO系列教程(十) Java NIO DatagramChannel
- 0037 Java NIO DatagramChannel(二)【底层】
- Java NIO DatagramChannel
- java的nio之:java的nio系列教程之channel的数据交换
- Java NIO 学习(五)--DataGramChannel