`
pluto418
  • 浏览: 169956 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

NIO基本(3)

    博客分类:
  • J2SE
阅读更多
DatagramChannel 是处理UDP协议

1. server
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.charset.Charset;

public class DatagramServer {
	public static void main(String[] args) throws Exception {
		DatagramChannel channel = DatagramChannel.open();
		channel.socket().bind(new InetSocketAddress(1234));

		ByteBuffer bf = ByteBuffer.allocate(1024);

		while (true) {
			System.out.println("listening  ... ");
			SocketAddress remoteAddress = channel.receive(bf);

			new DealClientThread(channel, remoteAddress, bf);
		}
	}
}

class DealClientThread implements Runnable {

	private DatagramChannel channel;
	private SocketAddress remoteAddress;
	private ByteBuffer bf;

	public DealClientThread(DatagramChannel channel,
			SocketAddress remoteAddress, ByteBuffer bf) {
		this.channel = channel;
		this.remoteAddress = remoteAddress;
		this.bf = bf;

		new Thread(this).start();
	}

	public void run() {
		try {
			// reveive
			bf.flip();
			String receivedString = Charset.forName("UTF-8").newDecoder()
					.decode(bf).toString();

			System.out.println("Receivet client " + remoteAddress.toString()
					+ " message: " + receivedString);

			// send
			String sendString = "Hi, client(" + remoteAddress.toString()
					+ ") I had receive your message.";
			ByteBuffer bfSend = ByteBuffer.wrap(sendString.getBytes("UTF-8"));
			channel.send(bfSend, remoteAddress);
		} catch (Exception ex) {
			ex.printStackTrace();
		}
	}
}



2. client
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.DatagramChannel;
import java.nio.charset.Charset;
import java.util.Date;

public class DatagramClient {
	public static void main(String[] args) throws Exception {
		// send
		DatagramChannel channel = DatagramChannel.open();
		String sendString = "Hi, server. @" + new Date().toString();
		ByteBuffer sendBuffer = ByteBuffer.wrap(sendString.getBytes("UTF-8"));
		channel.send(sendBuffer, new InetSocketAddress("127.0.0.1", 1234));
		System.out.println("Send message to server end");

		// receive
		ByteBuffer receiveBuffer = ByteBuffer.allocate(80);
		SocketAddress remoteAddress = channel.receive(receiveBuffer);
		receiveBuffer.flip();

		String receivedString = Charset.forName("UTF-8").newDecoder()
				.decode(receiveBuffer).toString();
		System.out.println("Receive message from " + remoteAddress.toString()
				+ " server: " + receivedString);
	}
}
分享到:
评论

相关推荐

    Java NIO Socket基本

    Java NIO(New Input/Output)是Java标准库中提供的一种I/O模型,与传统的 Blocking I/O(同步阻塞I/O)相对。NIO在Java 1.4版本引入,其设计目标是提供一种更高效、更灵活的I/O操作方式,特别适合处理大量并发连接...

    基于nio实现的多文件上传源码

    首先,理解NIO的基本概念是必要的。NIO中的“非阻塞”意味着当数据不可用时,读写操作不会被挂起,而是立即返回,这极大地提高了程序的效率。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器...

    nio demo for nio学习笔记(体系结构以及模块介绍)

    在学习NIO时,首先需要理解Channel、Buffer、Selector的基本概念和使用方法,然后通过实例来熟悉它们的交互过程。例如,可以通过创建一个简单的服务器,使用ServerSocketChannel监听连接,SocketChannel处理客户端...

    java NIO实例

    3. **Buffer(缓冲区)**:在NIO中,数据读写都是通过缓冲区进行的。缓冲区是一个可以容纳特定类型数据(如字节、字符、整数等)的容器,它提供了对数据的高效访问和管理。 4. **FileChannel**:用于文件的读写,...

    Java NIO系列教程(一) Java NIO 概述

    3. 调用Selector的`select()`方法等待事件的发生。如果没有任何事件发生,则此方法会阻塞直到有事件可用。 4. 一旦有事件发生,Selector会返回就绪的Channel列表,这时可以对这些Channel进行相应的处理。 #### 四...

    基于nio的简易聊天室

    缓冲区是NIO中数据存储的主要方式,它们是固定大小的数组,可以用于存储各种基本类型的数据,如字符、字节、整数等。在读写操作中,数据会先被存入缓冲区,然后再从缓冲区传输,这样可以提高效率。在这个聊天室应用...

    Java IO, NIO and NIO.2

    3. Stream类:包括字节流InputStream和OutputStream,以及字符流Reader和Writer,提供了基本的读取、写入功能。 4. Writer/Reader类:专门用于处理字符数据的类,它们可以用来读写字符流。 Java IO通过try-with-...

    JAVA-NIO-DEMO

    3. **选择器(Selectors)**:选择器允许单个线程监控多个通道,查看哪些通道已经准备好进行读写操作,从而提高多路复用的效率。 接下来,我们谈谈Anontion(注解)。在Java中,注解是一种元数据,可以为编译器、...

    《NIO与Socket编程技术指南》_高洪岩

    3. 非阻塞I/O:对比NIO和BIO,解释非阻塞I/O的优势,并展示如何在实际项目中应用。 4. 多路复用:详述选择器的工作原理,如何注册、选择和处理事件,以及如何优化多路复用的性能。 5. 客户端与服务器通信:介绍如何...

    Java.NIO资源下载资源下载

    #### 3. Selector(选择器) - **Selector 基础**:介绍了 Selector 的基本概念及工作原理。 - **使用 SelectionKey**:解释了如何使用 SelectionKey 来管理 Channel 的选择状态。 - **使用 Selectors**:详细讨论...

    NIO实现邮件接收原码

    以上是使用NIO实现邮件接收的基本原理和步骤,实际开发中还需要考虑性能优化、错误处理、多线程等问题。在"assignment2"这个压缩包文件中,可能包含了实现这一功能的具体代码,你可以参考学习,理解其中的逻辑和技巧...

    nio入门 IBM教材,pdf格式

    ### NIO 入门知识点详解 #### 一、NIO 的引入及其背景 - **NIO 的起源**:NIO(New Input/Output)库是在 JDK 1.4 中引入的,旨在解决传统 Java I/O 操作的局限性和性能瓶颈。 - **改进目标**:NIO 通过提供高速...

    java NIO 写文件

    首先,理解Java NIO的基本概念非常重要。NIO中的“N”代表“非阻塞”,这意味着在进行I/O操作时,程序可以继续执行其他任务,而不是等待数据传输完成。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择...

    java nio 实现socket

    #### 三、NIO实现Socket通信的基本流程 基于Java NIO的Socket通信流程大致如下: 1. **创建ServerSocketChannel**:服务器端首先需要创建一个`ServerSocketChannel`,用于监听客户端的连接请求。 2. **创建...

    深入浅出NIO

    《深入浅出NIO》 在Java编程领域,NIO(New Input/Output)是一种用于替代标准IO模型的机制,其核心在于非阻塞的I/O操作和通道(Channel)...通过理解NIO的基本概念和机制,我们可以构建出更高效、可扩展的应用程序。

    apache nio 很好的学习资料

    首先,我们要理解NIO的基本理念。传统的BIO模型在进行I/O操作时,如果一个线程正在读取或写入数据,那么这个线程会一直被阻塞,直到I/O操作完成。而在NIO中,I/O操作不再阻塞线程,而是采用“选择器”(Selector)来...

    java nio 读文件

    一、NIO的基本概念 1. 缓冲区(Buffer):NIO的核心组件,用于存储数据。Java提供了多种Buffer类,如ByteBuffer、CharBuffer、IntBuffer等,分别对应不同数据类型。每个Buffer都有特定的方法用于写入、读取、清理和...

Global site tag (gtag.js) - Google Analytics