////////////////////////////Demo package com.test.java; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; public class DatagramTestMain { private static final int port = 30006; /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Thread server = new ServerThread(); server.start(); Thread client = new ClientThread(); client.start(); Thread.sleep(3000); } static class ServerThread extends Thread { @Override public void run() { try { DatagramSocket socket = new DatagramSocket(null);// null is InetSocketAddress address = new InetSocketAddress(port);//server端bind到本地端口 socket.bind(address); //read DatagramPacket rp = new DatagramPacket(new byte[1024], 1024); socket.receive(rp); //right style //byte[] data = Arrays.copyOfRange(rp.getData(),rp.getOffset(), rp.getLength()); System.out.println("server Receive :" + new String(rp.getData())); //reply InetAddress from = rp.getAddress(); rp.setAddress(from); String message = "--server--" + System.currentTimeMillis(); rp.setData(message.getBytes()); socket.send(rp); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } static class ClientThread extends Thread { @Override public void run() { try { //send DatagramSocket socket = new DatagramSocket(); InetSocketAddress address = new InetSocketAddress( InetAddress.getLocalHost(), port); DatagramPacket sp = new DatagramPacket(new byte[1024], 1024); String data = "--client--" + System.currentTimeMillis(); sp.setData(data.getBytes()); sp.setSocketAddress(address); socket.send(sp); //block for receiving. socket.receive(sp); System.out.println("client receive:" + new String(sp.getData())); socket.close(); } catch (Exception e) { e.printStackTrace(); } } } }
/////////////////////////DatagramChannel: public class DatagramChannelTestMain { private static final int port = 30006; /** * @param args */ public static void main(String[] args) throws Exception { // TODO Auto-generated method stub Thread server = new ServerThread(); server.start(); Thread client = new ClientThread(); client.start(); Thread.sleep(3000); } static class ServerThread extends Thread { @Override public void run() { try { Selector selector = Selector.open(); InetSocketAddress address = new InetSocketAddress(port); // /socket.setSoTimeout(10000);//10ms DatagramChannel channel = DatagramChannel.open(); channel.configureBlocking(false); channel.socket().bind(address);// null is //channel.register(selector, SelectionKey.OP_READ);//DatagramChannel无需注册selector. ByteBuffer buffer = ByteBuffer.allocate(1024); while (true) { InetSocketAddress from = (InetSocketAddress)channel.receive(buffer); if(from == null){//如果from为null,则表示没有收到数据 Thread.sleep(1000); continue; } buffer.flip(); System.out.println("///////////////////Receive"); System.out.println("data : " + new String(buffer.array())); System.out.println("time : " + System.currentTimeMillis()); System.out.println("from : " + from.getHostName()); buffer.clear(); } } catch (Exception e) { e.printStackTrace(); } } } static class ClientThread extends Thread { @Override public void run() { try { InetSocketAddress address = new InetSocketAddress( InetAddress.getLocalHost(), port); Selector selector = Selector.open(); DatagramChannel channel = DatagramChannel.open(); channel.configureBlocking(false); //channel.socket().connect(address); int count = 0; ByteBuffer buffer = ByteBuffer.allocate(1024); while (count < 100) { String data = "Send Time : " + System.currentTimeMillis(); buffer.put(data.getBytes()); buffer.flip(); channel.send(buffer, address);//通过send指定address System.out.println("///////////////////Send"); System.out.println(data); Thread.sleep(2000); buffer.clear(); count ++; } channel.close(); } catch (Exception e) { e.printStackTrace(); } } } }
相关推荐
Nio详细介绍,实例演示 Nio详细介绍,实例演示 Nio详细介绍,实例演示Nio详细介绍,实例演示 Nio详细介绍,实例演示 Nio详细介绍,实例演示
postgres-nio::elephant:用于PostgreSQL非阻塞,事件驱动的Swift客户端
NIO编程实现实例,
Maven坐标:org.apache.httpcomponents:httpcore-nio:4.4.6; 标签:apache、httpcomponents、nio、httpcore、jar包、java、中英对照文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可...
一站式学习Java网络编程 全面理解BIO:NIO:AIO1
NULL 博文链接:https://shift-alt-ctrl.iteye.com/blog/1840554
java NIO 消息推送实例代码,解压Tmp.zip Desk为桌面程序,DeskAppServer为服务端程序,江巅
实例化HashMap类型的一个对象用来存放每一个客户对应的套接字和通道,实例化线程通道选择器等,当由用户请求时,接受,加入选择项,注册感兴趣事件,另一线程处理输入流,在前面加echo:,发给客户端。
Ruby的新I / O(nio4r) :可伸缩网络客户端和服务器的跨平台异步I / O原语。 根据Java NIO API建模,但为易于使用而进行了简化。 nio4r为Ruby提供了一个抽象的,跨平台的有状态I / O选择器API。 I / O选择器是基于...
java.nio.file包的轻量级包装器。 使用 与莱恩: [nio2 " 0.2.1 " ] 动机 创建这个库有两个主要原因: 允许 clojure 开发人员利用 NIO2 功能 使文件系统 IO 在 clojure 中可测试 引入了与文件系统进行惰性交互的...
nio代码实例,Java NIO 系列教程,买不了吃亏,买不了上当
socket通信nio模式有很多实现方式,但是在性能上、资源上一般很少考虑,这里封装了一个性能极强的程序。
Maven坐标:org.apache.httpcomponents:httpcore-nio:4.4.14; 标签:apache、httpcomponents、httpcore、nio、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览...
Maven坐标:org.jboss.xnio:xnio-nio:3.8.4.Final; 标签:jboss、xnio、nio、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的...
多线程NIO客户端实例
nio 的实现例子 里面有详细的中文注释 配合查询api 帮助你更好地学习nio 特点:非阻塞
Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 ...
手写 tomcat nio http://knight-black-bob.iteye.com/blog/2408450
由于React堆线程可以在执行IO时饱和,因此nioreactor使用接受器线程将新连接转发到可以在非阻塞模式下处理读取和写入的React堆池。 建筑分布 要求 2.2.0或以上 Java 8或以上 建立: git clone mvn clean install ...
NULL 博文链接:https://conkeyn.iteye.com/blog/523234