Java-NIO(八):DatagramChannel

Java NIO中的DatagramChannel是一个能收发UDP包的通道。
操作步骤:
  1)打开 DatagramChannel
  2)接收/发送数据

同样它也支持NIO的非阻塞模式操作,例如:

 1 @Test
 2     public void send() throws IOException {
 3         DatagramChannel channel = DatagramChannel.open();
 4         channel.configureBlocking(false);
 5
 6         ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
 7
 8         Scanner scanner = new Scanner(System.in);
 9         SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
10         while (scanner.hasNext()) {
11             String line = scanner.next();
12             byteBuffer.put((format.format(new Date()) + ":" + line).getBytes());
13             byteBuffer.flip();
14
15             channel.send(byteBuffer, new InetSocketAddress("127.0.0.1", 9899));
16             byteBuffer.clear();
17         }
18
19         channel.close();
20     }
21
22     @Test
23     public void receive() throws IOException {
24         DatagramChannel channel = DatagramChannel.open();
25         channel.configureBlocking(false);
26         channel.bind(new InetSocketAddress(9899));
27
28         Selector selector = Selector.open();
29         channel.register(selector, SelectionKey.OP_READ);
30
31         while (selector.select() > 0) {
32             Iterator<SelectionKey> selectionKeys = selector.selectedKeys().iterator();
33             while (selectionKeys.hasNext()) {
34                 SelectionKey selectionKey = selectionKeys.next();
35                 if (selectionKey.isReadable()) {
36                     ByteBuffer buffer = ByteBuffer.allocate(1024);
37                     channel.receive(buffer);
38                     buffer.flip();
39                     System.out.println(new String(buffer.array(), 0, buffer.limit()));
40                     buffer.clear();
41                 }
42
43                 selectionKeys.remove();
44             }
45         }
46
47     }
时间: 2024-10-31 15:13:37

Java-NIO(八):DatagramChannel的相关文章

Java NIO总结

一.NIO NIO是new IO,也是非阻塞IO.有Channel.Selector.Buffer.Pipe.FileLock等类. Buffer在java.nio包 Channel.Selector.Pipe.FileLock等在java.nio.channels包 二.Channel通道 设置非阻塞configureBlocking(false); 注册选择器register(selector,SelectionKey.OP_XXX) 使用方法read(Buffer) ,write(Buff

java NIO-Channel

基本简介 Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式. Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中. Java NIO: Non-blocking IO(非阻塞IO) Java

Java NIO (2) Channel

Java NIO Channel Java NIO Channels are similar to streams with a few differences: You can both read and write to a Channels. Streams are typically one-way (read or write). Channels can be read and written asynchronously. Channels always read to, or w

Java NIO (1) Overview

Java NIO Overview Java NIO consist of the following core components: Channels Buffers Selectors Java NIO has more classes and components than these, but the Channel, Buffer and Selector forms the core of the API, in my opinion. The rest of the compon

Java NIO Overview

Java Nio 1 Java NIO Tutorial 2 Java NIO Overview 3 Java NIO Channel 4 Java NIO Buffer 5 Java NIO Scatter / Gather 6 Java NIO Channel to Channel Transfers 7 Java NIO Selector 8 Java NIO FileChannel 9 Java NIO SocketChannel 10 Java NIO ServerSocketChan

Java NIO Channel

Java Nio 1 Java NIO Tutorial 2 Java NIO Overview 3 Java NIO Channel 4 Java NIO Buffer 5 Java NIO Scatter / Gather 6 Java NIO Channel to Channel Transfers 7 Java NIO Selector 8 Java NIO FileChannel 9 Java NIO SocketChannel 10 Java NIO ServerSocketChan

使用JAVA NIO实现的UDP client和server

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// client.java //////////////////////////////////////////////////////////////////////////////////////////////////////////

java nio之channel

一.通道(Channel):由 java.nio.channels 包定义的.Channel 表示 IO 源与目标打开的连接.Channel 类似于传统的"流".只不过 Channel本身不能直接访问数据,Channel 只能与Buffer 进行交互. 二.Channel重要实现 FileChannel:操作文件的读写 SocketChannel:通过TCP读写网络数据 ServerSocketChannel:监听TCP连接,你能利用它创建一个最简单的Web服务器 DatagramCh

java nio学习三:NIO 的非阻塞式网络通信

一.阻塞和非阻塞 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read() 或 write()时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此期间不能执行其他任务.因此,在完成网络通信进行 IO 操作时,由于线程会阻塞,所以服务器端必须为每个客户端都提供一个独立的线程进行处理,当服务器端需要处理大量客户端时,性能急剧下降.Java NIO 是非阻塞模式的.当线程从某通道进行读写数据时,若没有数据可用时,该线程可以进行其他任务.线程通常将非阻塞 IO 的空闲时间用于在其他通道上

JAVA NIO工作原理及代码示例

简介:本文主要介绍了JAVA NIO中的Buffer, Channel, Selector的工作原理以及使用它们的若干注意事项,最后是利用它们实现服务器和客户端通信的代码实例. 欢迎探讨,如有错误敬请指正 如需转载,请注明出处 http://www.cnblogs.com/nullzx/ 1. ByteBuffer 1.1直接缓冲区和非直接缓冲区 下面是创建ByteBuffer对象的几种方式 static ByteBuffer allocate(int capacity) static Byte