`
gaojingsong
  • 浏览: 1202666 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JAVA之NIO编程Client端】

阅读更多
package demo.test;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
import java.util.Iterator;
import java.util.Set;

 
public class NIOClient {

	/*标识数字*/
	private static int flag = 0;
	/*缓冲区大小*/
	private static int BLOCK = 4096;
	/*接受数据缓冲区*/
	private static ByteBuffer sendbuffer = ByteBuffer.allocate(BLOCK);
	/*发送数据缓冲区*/
	private static ByteBuffer receivebuffer = ByteBuffer.allocate(BLOCK);
	/*服务器端地址*/
	private final static InetSocketAddress SERVER_ADDRESS = new InetSocketAddress("localhost", 8888);

	public static void main(String[] args) throws IOException {
		// 打开socket通道
		SocketChannel socketChannel = SocketChannel.open();
		// 设置为非阻塞方式
		socketChannel.configureBlocking(false);
		// 打开选择器
		Selector selector = Selector.open();
		// 注册连接服务端socket动作
		socketChannel.register(selector, SelectionKey.OP_CONNECT);
		// 连接
		socketChannel.connect(SERVER_ADDRESS);
		// 分配缓冲区大小内存
		
		Set selectionKeys;
		Iterator iterator;
		SelectionKey selectionKey;
		SocketChannel client;
		String receiveText;
		String sendText;
		int count=0;

		while (true) {
			//选择一组键,其相应的通道已为 I/O 操作准备就绪。
			//此方法执行处于阻塞模式的选择操作。
			selector.select();
			//返回此选择器的已选择键集。
			selectionKeys = selector.selectedKeys();
			//System.out.println(selectionKeys.size());
			iterator = selectionKeys.iterator();
			while (iterator.hasNext()) {
				selectionKey = iterator.next();
				if (selectionKey.isConnectable()) {
					System.out.println("client connect");
					client = (SocketChannel) selectionKey.channel();
					// 判断此通道上是否正在进行连接操作。
					// 完成套接字通道的连接过程。
					if (client.isConnectionPending()) {
						client.finishConnect();
						System.out.println("完成连接!");
						sendbuffer.clear();
						sendbuffer.put("Hello,Server".getBytes());
						sendbuffer.flip();
						client.write(sendbuffer);
					}
					client.register(selector, SelectionKey.OP_READ);
				} else if (selectionKey.isReadable()) {
					client = (SocketChannel) selectionKey.channel();
					//将缓冲区清空以备下次读取
					receivebuffer.clear();
					//读取服务器发送来的数据到缓冲区中
					count=client.read(receivebuffer);
					if(count>0){
						receiveText = new String( receivebuffer.array(),0,count);
						System.out.println("客户端接受服务器端数据--:"+receiveText);
						client.register(selector, SelectionKey.OP_WRITE);
					}

				} else if (selectionKey.isWritable()) {
					sendbuffer.clear();
					client = (SocketChannel) selectionKey.channel();
					sendText = "message from client--" + (flag++);
					sendbuffer.put(sendText.getBytes());
					 //将缓冲区各标志复位,因为向里面put了数据标志被改变要想从中读取数据发向服务器,就要复位
					sendbuffer.flip();
					client.write(sendbuffer);
					System.out.println("客户端向服务器端发送数据--:"+sendText);
					client.register(selector, SelectionKey.OP_READ);
				}
			}
			selectionKeys.clear();
		}
	}
}
  • 大小: 48.2 KB
0
1
分享到:
评论

相关推荐

    JAVA-NIO程序设计完整实例

    - **高并发服务器**: NIO的选择器机制使得一个线程可以处理多个客户端连接,适合构建高性能的服务器端应用。 - **文件批量处理**: 使用FileChannel的transferTo()和transferFrom()方法,可以高效地进行文件的复制和...

    java socket nio 研究

    Java Socket和NIO(Non-blocking Input/Output,非阻塞I/O)是Java网络编程中的重要组成部分,它们在处理高并发、低延迟的网络服务时展现出强大的能力。本篇文章将深入探讨这两个概念,并通过示例代码`...

    基于java NIO的socket通信demo

    在`NioClient.java`中,客户端同样使用NIO进行通信。客户端首先创建一个`SocketChannel`,然后向服务器的`ServerSocketChannel`发起连接请求。接着,客户端可以设置自己的`Charset`来确保数据在传输过程中不出现乱码...

    NioSocket,包括server端和client端

    NioSocket是一个基于Java NIO(非阻塞I/O)技术实现的网络通信框架,它包含服务器端(Server)和客户端(Client)两部分。在Java编程中,NIO(New Input/Output)提供了一种不同于传统IO模型的I/O操作方式,其核心...

    实现java网络与nio例子

    Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 ...这个"网络与nio"的压缩包文件很可能包含了服务器端和客户端的完整代码示例,可以帮助我们深入理解并实践Java NIO在网络编程中的应用。

    浅谈java中nio的使用方式

    Java NIO(New Input/Output)是一种用于处理I/O操作的非阻塞I/O模型,与传统的Java IO相比,它提供了更高的性能和更灵活的编程方式。NIO的核心概念包括Channel、Selector、SelectionKey和Buffer。 1. **Channel...

    Java NIO实现多个客户端之间的消息互发,客户端与服务器完整代码

    Java NIO(Non-blocking Input/...在实际开发中,Java NIO的使用需要对多线程、网络编程以及NIO API有深入的理解。通过这种方式构建的系统可以高效地处理大量并发连接,非常适合于聊天、游戏等实时性要求高的应用场景。

    java nio聊天室源码

    Java NIO(New IO)是Java 1.4版本引入的一种新的I/O API,它提供了非阻塞I/O操作的能力,极大地提升了Java在...通过分析和学习这个源码,开发者可以深入理解Java NIO的工作原理,并将其应用于实际的网络编程项目中。

    java BIO NIO AIO

    BIO 的工作机制是基于 Client/Server 模型的,服务器端负责绑定 IP 地址,启动监听端口;客户端负责发起连接操作。连接成功后,双方通过网络套接字(Socket)进行通信。在 BIO 模式下,客户端和服务端是完全同步的,...

    nio socket编程java代码示例,客户端发送消息,服务端接收

    本示例将详细解析如何使用Java的非阻塞I/O(NIO)实现Socket通信,包括客户端发送消息和服务器端接收消息的过程。 首先,理解NIO(Non-blocking Input/Output)的概念至关重要。NIO与传统的IO模型不同,它提供了对...

    局域网传送文件java实现(Client)端

    综上所述,"局域网传送文件java实现(Client)端"项目涵盖了Java网络编程的核心概念,包括TCP连接、输入输出流、文件操作、异常处理以及可能的多线程应用。通过学习和实践这个项目,开发者可以深入理解Java网络编程...

    java NIO 开发技术

    总的来说,Java NIO通过非阻塞I/O和选择器机制,实现了更加高效和可扩展的网络编程模型,特别适合处理大量并发连接的情况,如Web服务器、分布式系统等。理解和掌握NIO的原理和使用,对于优化高性能服务器端程序具有...

    java NIO 学习 聊天室程序 (3)

    Java NIO(New IO)是Java 1.4版本引入的一个新特性,是对传统IO模型的重大改进。在传统的IO模型中,数据传输基于字节流...同时,通过分析源代码,你将能更好地掌握NIO在实际项目中的应用,提升你的Java并发编程技能。

    Java socket网络编程的基础示例

    Java Socket网络编程是Java平台中实现网络通信的核心技术,它基于传输层协议TCP和UDP,为应用程序提供了低级别的、原始的比特流服务。本基础示例将深入探讨这两种协议下的Socket编程。 首先,TCP(Transmission ...

    java多线程Client/Server程序

    在Java编程领域,多线程Client/Server程序是网络编程中的一个重要组成部分,它允许服务器同时处理多个客户端的请求。在本程序中,`ChatServer.java` 和 `ChatClient.java` 文件可能分别代表了服务器端和客户端的核心...

    使用Java_NIO编写高性能的服务器.doc

    ### 使用Java NIO编写高性能服务器的关键...综上所述,使用Java NIO编写的高性能服务器通过引入非阻塞IO机制,不仅极大地提升了系统的并发处理能力,还有效降低了资源消耗,是现代高性能服务器开发不可或缺的技术之一。

    Java NIO原理分析及代码实例

    Java NIO(New Input/Output)是Java标准库提供的一种I/...了解和熟练使用Java NIO对于优化I/O密集型应用的性能至关重要,特别是在网络编程和高并发场景下。通过合理的使用NIO,开发者可以构建出更加高效、灵活的系统。

    Java源码:Socket编程.rar_java socket _java编程_socket java_socket编程 jav

    在Java Socket编程中,我们还可以使用NIO(Non-blocking I/O)进行更高效的并发处理。NIO提供了选择器(Selector)和通道(Channel)等机制,可以在单线程下处理多个Socket连接,提高了系统资源的利用率。 另外,`...

    JAVA 网络编程之QQ 项目编程实训

    在“JAVA 网络编程之QQ 项目编程实训”中,我们主要关注的是使用Java语言进行网络编程,特别是构建类似QQ这样的实时通讯系统。这个实训项目是学习网络编程的一个优秀起点,它涵盖了多种关键技术和概念,对于初学者...

Global site tag (gtag.js) - Google Analytics