Java by API/java.nio.channels/DatagramChannel

Материал из Java эксперт
Перейти к: навигация, поиск

DatagramChannel: connect(SocketAddress remote) throws IOException

   <source lang="java">
 

import java.io.IOException; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.DatagramChannel; import java.util.Date; public class Main {

 public static void main(String[] args) throws IOException {
   DatagramChannel channel = DatagramChannel.open();
   SocketAddress address = new InetSocketAddress(0);
   DatagramSocket socket = channel.socket();
   socket.bind(address);
   SocketAddress server = new InetSocketAddress("time-a.nist.gov", 37);
   channel.connect(server);
   ByteBuffer buffer = ByteBuffer.allocate(8);
   buffer.order(ByteOrder.BIG_ENDIAN);
   // send a byte of data to the server
   buffer.put((byte) 0);
   buffer.flip();
   channel.write(buffer);
   // get the buffer ready to receive data
   buffer.clear();
   // fill the first four bytes with zeros
   buffer.putInt(0);
   channel.read(buffer);
   buffer.flip();
   // convert seconds since 1900 to a java.util.Date
   long secondsSince1900 = buffer.getLong();
   long differenceBetweenEpochs = 2208988800L;
   long secondsSince1970 = secondsSince1900 - differenceBetweenEpochs;
   long msSince1970 = secondsSince1970 * 1000;
   Date time = new Date(msSince1970);
   System.out.println(time);
 }

}


 </source>
   
  
 
  



DatagramChannel: open() throws IOException

   <source lang="java">
 

import java.io.IOException; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.DatagramChannel; import java.util.Date; public class Main {

 public static void main(String[] args) throws IOException {
   DatagramChannel channel = DatagramChannel.open();
   SocketAddress address = new InetSocketAddress(0);
   DatagramSocket socket = channel.socket();
   socket.bind(address);
   SocketAddress server = new InetSocketAddress("time-a.nist.gov", 37);
   channel.connect(server);
   ByteBuffer buffer = ByteBuffer.allocate(8);
   buffer.order(ByteOrder.BIG_ENDIAN);
   // send a byte of data to the server
   buffer.put((byte) 0);
   buffer.flip();
   channel.write(buffer);
   // get the buffer ready to receive data
   buffer.clear();
   // fill the first four bytes with zeros
   buffer.putInt(0);
   channel.read(buffer);
   buffer.flip();
   // convert seconds since 1900 to a java.util.Date
   long secondsSince1900 = buffer.getLong();
   long differenceBetweenEpochs = 2208988800L;
   long secondsSince1970 = secondsSince1900 - differenceBetweenEpochs;
   long msSince1970 = secondsSince1970 * 1000;
   Date time = new Date(msSince1970);
   System.out.println(time);
 }

}


 </source>
   
  
 
  



DatagramChannel: read(ByteBuffer dst) throws IOException

   <source lang="java">
 

import java.io.IOException; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.DatagramChannel; import java.util.Date; public class Main {

 public static void main(String[] args) throws IOException {
   DatagramChannel channel = DatagramChannel.open();
   SocketAddress address = new InetSocketAddress(0);
   DatagramSocket socket = channel.socket();
   socket.bind(address);
   SocketAddress server = new InetSocketAddress("time-a.nist.gov", 37);
   channel.connect(server);
   ByteBuffer buffer = ByteBuffer.allocate(8);
   buffer.order(ByteOrder.BIG_ENDIAN);
   // send a byte of data to the server
   buffer.put((byte) 0);
   buffer.flip();
   channel.write(buffer);
   // get the buffer ready to receive data
   buffer.clear();
   // fill the first four bytes with zeros
   buffer.putInt(0);
   channel.read(buffer);
   buffer.flip();
   // convert seconds since 1900 to a java.util.Date
   long secondsSince1900 = buffer.getLong();
   long differenceBetweenEpochs = 2208988800L;
   long secondsSince1970 = secondsSince1900 - differenceBetweenEpochs;
   long msSince1970 = secondsSince1970 * 1000;
   Date time = new Date(msSince1970);
   System.out.println(time);
 }

}


 </source>
   
  
 
  



DatagramChannel: write(ByteBuffer src) throws IOException

   <source lang="java">
 

import java.io.IOException; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketAddress; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.nio.channels.DatagramChannel; import java.util.Date; public class Main {

 public static void main(String[] args) throws IOException {
   DatagramChannel channel = DatagramChannel.open();
   SocketAddress address = new InetSocketAddress(0);
   DatagramSocket socket = channel.socket();
   socket.bind(address);
   SocketAddress server = new InetSocketAddress("time-a.nist.gov", 37);
   channel.connect(server);
   ByteBuffer buffer = ByteBuffer.allocate(8);
   buffer.order(ByteOrder.BIG_ENDIAN);
   // send a byte of data to the server
   buffer.put((byte) 0);
   buffer.flip();
   channel.write(buffer);
   // get the buffer ready to receive data
   buffer.clear();
   // fill the first four bytes with zeros
   buffer.putInt(0);
   channel.read(buffer);
   buffer.flip();
   // convert seconds since 1900 to a java.util.Date
   long secondsSince1900 = buffer.getLong();
   long differenceBetweenEpochs = 2208988800L;
   long secondsSince1970 = secondsSince1900 - differenceBetweenEpochs;
   long msSince1970 = secondsSince1970 * 1000;
   Date time = new Date(msSince1970);
   System.out.println(time);
 }

}


 </source>