摘要:因為是無連接的網絡協議,所以不能像其它通道那樣讀取和寫入。它發送和接收的是數據包。也不會通知你發出的數據包是否已收到,因為在數據傳送方面沒有任何保證。而是鎖住,讓其只能從特定地址收發數據。只是在數據傳送方面沒有任何保證。
Java NIO中的DatagramChannel是一個能收發UDP包的通道。因為UDP是無連接的網絡協議,所以不能像其它通道那樣讀取和寫入。它發送和接收的是數據包。
打開 DatagramChannel
下面是 DatagramChannel 的打開方式:
DatagramChannel channel = DatagramChannel.open(); channel.socket().bind(new InetSocketAddress(9999));
這個例子打開的 DatagramChannel可以在UDP端口9999上接收數據包。
接收數據
通過receive()方法從DatagramChannel接收數據,如:
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(but);
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71731.html
摘要:通道可以異步讀寫。使用的方法讀取數據創建一個讀數據緩沖區對象從通道中讀取數據使用的方法寫入數據創建一個寫數據緩沖區對象寫入數據關閉完成使用后,您必須關閉它。五提供了一種被稱為的新功能,也稱為本地矢量。功能是通道提供的并不是。 歷史回顧: Java NIO 概覽 Java NIO 之 Buffer(緩沖區) 其他高贊文章: 面試中關于Redis的問題看這篇就夠了 一文輕松搞懂redis集...
摘要:通常來說所有的的操作都是從開始的一個類似于一個和對比我們可以在同一個中執行讀和寫操作然而同一個僅僅支持讀或寫可以異步地讀寫而是阻塞的同步讀寫總是從中讀取數據或將數據寫入到中類型有文件操作操作操作操作使用在服務器端這些通道涵蓋了和網絡以及文件 Java NIO Channel 通常來說, 所有的 NIO 的 I/O 操作都是從 Channel 開始的. 一個 channel 類似于一個 ...
摘要:學習和掌握技術已經不是一個攻城獅的加分技能,而是一個必備技能。是雙向的,不僅可以讀取數據還能保存數據,程序不能直接讀寫通道,只與緩沖區交互為了讓大家不被高并發與大量連接處理問題所困擾,動力節點推出了高效處理模型應用教程。 大家肯定了解Java IO, 但是對于NIO一般是陌生的,而現在使用到NIO的場景越來越多,很多技術框...
摘要:異步可以讓你異步的使用,例如當線程從通道讀取數據到緩沖區時,線程還是可以進行其他事情。當數據被寫入到緩沖區時,線程可以繼續處理它。因此,單個的線程可以監聽多個數據通道。下面是系列文章的目錄概述通道之間的數據傳輸與原文譯者郭蕾校對方騰飛 Java NIO(New IO)是一個可以替代標準Java IO API的IO API(從Java 1.4開始),Java NIO提供了與標準IO不同的...
閱讀 2984·2021-09-10 10:50
閱讀 3188·2019-08-30 14:19
閱讀 3515·2019-08-29 17:31
閱讀 3241·2019-08-29 16:43
閱讀 2191·2019-08-29 14:05
閱讀 2088·2019-08-29 13:17
閱讀 2041·2019-08-26 13:25
閱讀 1756·2019-08-26 12:20