Java Nio 十二、Java NIO DatagramChannel(数据报通道)
2016-04-10 21:39
706 查看
最后更新时间:2014-06-23
一个Java NIO数据报通道是一个可以发送和接收UDP包的通道。因为UDP是一个无连接的网络协议,你不能像其他的通道那样只是默认的读和写。代替的你发送和接收数据包。
打开一个DatagramChannel
这里是如何打开一个DatagramChannel:
这个例子打开一个DatagramChannel,它可以接收到一个UDP端口为9999的数据包。
接收数据
你可以通过调用DatagramChannel的receive()方法的接收数据,像这样:
这个receive()方法将会拷贝一个接收到的数据包的内容进入到给予的Buffer。如果这个接收到的包超过了Buffer可以接收的数据,那个剩下的数据将会被安静的放弃。
发送数据
你可以通过调用send()方法通过一个DatagramChannel发送数据,像下面这样:
这个例子发送了一个字符串到"jenkov.com"的服务器接通UDP的80端口。不过没有东西在那个端口上正在监听,以至于什么都不会发生。你将不会被通知这个发送的包是否被接收到,因为UDP对于数据的传递不会做任何的保证。
连接到一个特殊的地址
在网络上连接一个特殊地址的DatagramChannel是可能的。因为UDP是一个无连接的协议,这个连接到一个地址的方式不会创建一个真的连接,就像一个TCP通道。然而,它将会锁住你的DatagramChannel,以至于只能从一个特殊的地址中发送和接收数据包。
这里有一个例子:
当连接上的时候,你也可以使用read()和write()方法,同样的如果你正在使用一个传统的通道。你只是不会有任何的保证关于发送数据的传送。这里有几个例子:
翻译地址:http://tutorials.jenkov.com/java-nio/datagram-channel.html
一个Java NIO数据报通道是一个可以发送和接收UDP包的通道。因为UDP是一个无连接的网络协议,你不能像其他的通道那样只是默认的读和写。代替的你发送和接收数据包。
打开一个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可以接收的数据,那个剩下的数据将会被安静的放弃。
发送数据
你可以通过调用send()方法通过一个DatagramChannel发送数据,像下面这样:
String newData = "New String to write to file..." + System.currentTimeMillis(); ByteBuffer buf = ByteBuffer.allocate(48); buf.clear(); buf.put(newData.getBytes()); buf.flip(); int bytesSent = channel.send(buf, new InetSocketAddress("jenkov.com", 80));
这个例子发送了一个字符串到"jenkov.com"的服务器接通UDP的80端口。不过没有东西在那个端口上正在监听,以至于什么都不会发生。你将不会被通知这个发送的包是否被接收到,因为UDP对于数据的传递不会做任何的保证。
连接到一个特殊的地址
在网络上连接一个特殊地址的DatagramChannel是可能的。因为UDP是一个无连接的协议,这个连接到一个地址的方式不会创建一个真的连接,就像一个TCP通道。然而,它将会锁住你的DatagramChannel,以至于只能从一个特殊的地址中发送和接收数据包。
这里有一个例子:
channel.connect(new InetSocketAddress("jenkov.com", 80));
当连接上的时候,你也可以使用read()和write()方法,同样的如果你正在使用一个传统的通道。你只是不会有任何的保证关于发送数据的传送。这里有几个例子:
int bytesRead = channel.read(buf);
int bytesWritten = channel.write(buf);
翻译地址:http://tutorials.jenkov.com/java-nio/datagram-channel.html
相关文章推荐
- 20145322 《Java程序设计》第6周学习总结
- 轻量级javaee最后工作流项目总结
- Java的加载资源文件+JavaBean+内省机制
- 20145120 《Java程序设计》第6周学习总结
- struts2环境配置
- Java反射学习总结
- Spring-boot中利用外部配置文件生成数据源
- 在Myeclipse 中导入java web项目出现JRE System Library(unbound)和Server Library(unbound)解决方法
- Java并发编程:Lock
- Java编码规范
- Java各种对象理解(转)
- 20145239 《Java程序设计》第6周学习总结
- 20144303 《Java程序设计》第六周学习总结
- 20145235 《Java程序设计》第6周学习总结
- Spring4.2.5 - 之一
- maven install Unable to locate the Javac Compiler in: C:\Program Files\Java\jre7\..\lib\tools.jar
- spring security:第一个程序解析
- 20145223《Java程序程序设计》实验一实验报告
- 20145219 《Java程序设计》第06周学习总结
- 20145225《Java程序设计》 第6周学习总结