在java中可以基于java.nio.channels中的Channel和Selector的相关类来实现TCP/IP+NIO方式的系统间通信。
用于系统间通信依靠SocketChannel和ServerSocketChannel,SocketChannel用于建立连接,监听事件及操作读写,ServerSocketChannel用于监听端口及监听连接事件,可通过Selector来获取是否有要处理的事件。
服务端java代码:
客户端java代码:
- package com.java.distributed.message.tcpip;
-
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.InetSocketAddress;
- import java.net.SocketAddress;
- import java.nio.ByteBuffer;
- import java.nio.channels.SelectionKey;
- import java.nio.channels.Selector;
- import java.nio.channels.SocketChannel;
- import java.nio.charset.Charset;
-
-
- public class NIOClient {
-
-
-
-
-
- public static void main(String[] args) throws IOException {
- int port =7889;
- SocketChannel channel=SocketChannel.open();
- channel.configureBlocking(false);
-
- SocketAddress target=new InetSocketAddress("127.0.0.1",port);
- channel.connect(target);
- Selector selector=Selector.open();
-
- channel.register(selector, SelectionKey.OP_CONNECT);
- BufferedReader systemIn=new BufferedReader(new InputStreamReader(System.in));
-
- while(true){
- if(channel.isConnected()){
- String command=systemIn.readLine();
- channel.write(Charset.forName("UTF-8").encode(command));
-
- if(command==null||"quit".equalsIgnoreCase(command.trim())){
- systemIn.close();
- channel.close();
- selector.close();
- System.out.println("Client quit !");
- System.exit(0);
- }
- }
- int nKeys=selector.select(1000);
- if(nKeys>0){
- for(SelectionKey key:selector.selectedKeys()){
- if(key.isConnectable()){
- SocketChannel sc=(SocketChannel) key.channel();
- sc.configureBlocking(false);
- sc.register(selector, SelectionKey.OP_READ);
- sc.finishConnect();
- }else if(key.isReadable()){
- ByteBuffer buffer=ByteBuffer.allocate(1024);
- SocketChannel sc=(SocketChannel) key.channel();
- int readBytes=0;
- try{
- int ret=0;
- try{
- while((ret=sc.read(buffer))>0){
- readBytes+=ret;
- }
- }finally{
- buffer.flip();
- }
- if (readBytes > 0) {
- System.out.println(Charset.forName("UTF-8")
- .decode(buffer).toString());
- buffer = null;
- }
-
- }finally {
- if (buffer != null) {
- buffer.clear();
- }
- }
- }
- }
- selector.selectedKeys().clear();
- }
- }
- }
-
- }
分享到:
相关推荐
NULL 博文链接:https://eleopard.iteye.com/blog/1846770
网络通信工具,服务端和客户端连接测试工具,可单条发送,循环发送,模拟多客户端发送,本工具可以作为网络通信工具或压力测试工具, Java NIO Socket编程,需JAVA运行环境
java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket
运用线程,实现基于tcp/ip的文件传送。适用于做基于局域网的Java聊天程序
java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...
本人写的Nio非阻塞socket通信demo,内有注释。
Java编写的简易聊天工具,使用NIO实现非阻塞socket通信,使用Java原生sdk实现,可以运行。
非常详细地讲解了NIO中的缓冲区、通道、选择器、编码,以及使用Socket技术实现TCP/IP和UDP编程,细化到了演示全部SocketOption的特性,这对理解基于NIO和Socket技术为基础所开发的NIO框架是非常有好处的,本书以案例...
基于NIO的socket举例 基于NIO的socket举例 基于NIO的socket举例 基于NIO的socket举例 基于NIO的socket举例基于NIO的socket举例 基于NIO的socket举例
基于JavaNIO的非阻塞通信的研究与实现
基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络框架 xSocket.zip 基于java的开发源码-NIO网络...
基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现五子棋游戏.zip基于Java NIO实现五子棋游戏.zip 基于Java NIO实现...
NULL 博文链接:https://1358440610-qq-com.iteye.com/blog/2115715
TCP NIO socket TCP服务器,支持多个客户端连接
java NIO 创建的服务端,能够异步响应客户端的请求,客户端采用nio异步请求服务端,通信之间的乱码使用charset解决
用Java实现非阻塞通信 java.nio包提供了支持非阻塞通信的类,主要包括: ● ServerSocketChannel:ServerSocket的替代类,支持阻塞通信与非阻塞通信。 ● SocketChannel:Socket的替代类,支持阻塞通信与非阻塞通信...
java基于nio的socket通信.rar
Java NIO 应用 -- 使用内存映射文件实现进程间通信
1、支持TCP/IP协议的网络通信,TCP服务端和客户端,可单条发送,循环发送,模拟多客户端发送; 2、支持HTTP协议的网络通信, HTTP协议的服务端和客户端连接测试工具; 3、网络扫描工具,可扫描主机端口及扫描局域网内的...
java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...