`
pluto418
  • 浏览: 166269 次
  • 性别: 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基本

    NULL 博文链接:https://b-l-east.iteye.com/blog/1254693

    nio入门 IBM教材,pdf格式

    为了最大程度地从这里的讨论中获益,您应该理解基本的 Java 编程概念,如类、继承和使用包。多少熟悉一些原来的 I/O 库(来自 java.io.* 包)也会有所帮助。 虽然本教程要求掌握 Java 语言的工作词汇和概念,但是不...

    NIO2基础介绍

    主要是一些关于NIO2的基本操作和内容,内容是网上下载的收集的,适合没有使用过JDK7以上版本或没有使用过新的文件操作的规范的新手。

    httpcore-nio-4.3.jar包

    用Java实现非阻塞通信 ,用ServerSocket和Socket来编写服务器程序和客户程序,是Java网络编程的最基本的方式。 httpcore-nio-4.3.jar包

    Java NIO原理和使用

    本文主要简单介绍NIO的基本原理,在下一篇文章中,将结合Reactor模式和著名线程大师Doug Lea的一篇文章深入讨论。 NIO主要原理和适用。 NIO 有一个主要的类Selector,这个类似一个观察者,只要我们把需要探知的...

    java网络编程NIO视频教程

    01-Java NIO-课程简介.mp4 02-Java NIO-概述.mp4 03-Java NIO-Channel-概述.mp4 ...13-Java NIO-Buffer-基本使用.mp4 14-Java NIO-Buffer-三个属性和类型.mp4 15-Java NIO-Buffer-分配和读写数据.mp4

    NIO-实践-多线程实例

    NIO用于高性能Socket编程由来已久,网络也有较为丰富的原理和源代码。我这里主要介绍几点经验总结: ...本文粘贴多线程在NIO环境下的基本运用示例代码,同时演示了一个线程如何对多个连接进行读写的操作。

    java nio ppt

    java nio 相关 ppt,介绍了 java nio 的基本概念以及和其他 io 的区别

    Java NIO实战开发多人聊天室

    13-Java NIO-Buffer-基本使用.mp4 14-Java NIO-Buffer-三个属性和类型.mp4 17-Java NIO-Buffer-缓冲区分片.mp4 18-Java NIO-Buffer-只读缓冲区.mp4 19-Java NIO-Buffer-直接缓冲区.mp4 21-Java NIO-Selector-概述....

    nio_proxy:基本的 nio 代理

    nio_proxy 基本的 nio 代理

    Java NIO核心概念总结篇

    这是学习Java NIO过程中总结的核心概念,里面包含了基本的知识点,详细知识点也可以查看我的博客:pcwl_java里的Java NIO篇

    NIO学习系列:核心概念及基本读写

    NULL 博文链接:https://zhangshixi.iteye.com/blog/679959

    javaNIO学习笔记

    java NIO的基本知识点学习笔记,不包含具体代码

    nio.rar_FastCopyFile.java_NIO_UseFloatBuffer.java_java nio_文件锁

    Java NIO 源码适合初学者,里面包括通道和Buffer的基本适用,以及文件锁,和内存文件映射等等

    复习 J2SE基本内容 IO NIO AIO 的区别

    IO 是面向流的,NIO 是面向缓冲区的 IO 流是阻塞的,NIO 流是不阻塞的 IO 没有选择器,NIO 有选择器     从编程模式上来看AIO相对于NIO的区别在于,NIO需要使用者线程不停的轮询IO对象,来确定是否有数据准备好...

    JAVA Nio 学习探究

    包含NIO核心概念、基本文件读写、缓冲区内部实现机制、异步IO、缓冲区更多特性探究、文件锁与字符集

    javasnmp源码-nio-learn:JavaNIO使用示例,NIO的使用,TCP,UDP的简单示例

    java snmp 源码 Java NIO java nio 简介 Java NIO(New IO)是用于Java(来自Java ...NIO提供了与原来IO ...NIO支持面向缓冲区的,基于通道的IO操作。...NIO将以更加高效的方式进行文件的读写操作。...Buffer的基本使用 通过allo

    nio-template:使用matrix-nio在python中创建矩阵机器人的模板

    其中包括详细的文档以及有关基本机器人构建的分步指南。 功能包括对以下各项的现成支持: Bot命令 SQLite3和Postgres数据库后端 配置文件 多级日志记录 码头工人 参加端到端加密房间 使用nio-template的项目 一个...

    juc_nio_linux.rar

    java.util.concurrent、linux基本操作、NIO(同步、非阻塞)-Channel(通道)、Buffer(缓冲区)、Selector(选择器)

    从NIO到Netty,编程实战出租车905协议-08172347.pdf

    第3章,结合905.4-2014协议的基本内容,动手实现NIO长连接服务端的实现,以及协议内容的设计和实现思路; 第4章,实现长连接客户端,以及采用多线程技术进行系统性能测试; 第5章,介绍Netty相关基础知识,并使用...

Global site tag (gtag.js) - Google Analytics